我试图编写完整的多部分流,从客户端使用Spring restTemplate发送多部分请求,从服务器端自动将不同部分解析为对象(我使用JAXB进行对象封送),并以多部分形式返回响应。
我能够实现几乎所有的流,但是我不能从spring Controller中用jaxb对象发送多部分响应。
@RequestMapping(value="/putuser",method=RequestMethod.POST)
@ResponseBody
public MultiValueMap<String, Object> getUser(@RequestBody User user) throws IOException, JAXBException {
}
user.setName("new");
MultiValueMap<String, Object> form = new LinkedMultiValueMap<String, Object>();
form.add("user", user);
form.add("file", new FileSystemResource("/tmp/1.1"));
return form;
}
java.lang.ClassCastException: org.springframework.core.io.FileSystemResource cannot be cast to java.lang.String
at org.springframework.http.converter.FormHttpMessageConverter.writeForm(FormHttpMessageConverter.java:233)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:197)
at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:73)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:148)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:90)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:189)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:69)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:122)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:746)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.FormHttpMessageConverter">
<property name="partConverters">
<list>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter" />
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
试图使he FormHttpMessageConverter正确地编写部分,但这没有帮助
是否有任何方法使Spring发送不同类型的零件正确的多部分响应?
您需要将响应的Content-Type header设置为适当的值。FormHttpMessageConverter依赖于Content-Type来确定是否需要将响应强制转换为String或其他类型。
@RequestMapping(value="/putuser",method=RequestMethod.POST)
@ResponseBody
public MultiValueMap<String, Object> getUser(@RequestBody User user, HttpServletResponse httpResponse) throws IOException, JAXBException {
}
user.setName("new");
MultiValueMap<String, Object> form = new LinkedMultiValueMap<String, Object>();
form.add("user", user);
form.add("file", new FileSystemResource("/tmp/1.1"));
httpResponse.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE); // <-- IMPORTANT
return form;
}
通常,我需要通过JSOUP将数据以响应multipart/form-data的形式发送到站点 作为一个示例,使用一个简单的窗体来sgeniriruet您的查询。 <表单操作=«localhost:8000»方法=«post»enctype=»多部分/表单数据» <输入类型=»文本»名称=»文本»值=»文本默认值» <输入类型=»文件»名称=»文件1» <输入类型=»文件»名称=»文件2» 提交 通
我有一个基于泽西的网络服务,它产生一个“多部分/混合”响应如下:该方法读取一个文件,并应以八位字节格式返回。此外,它读取该文件的元数据,并以json形式返回。 方法: 我的问题是,我得到了以下错误,这对我来说没有意义: 据我所知,是os。toByteArray()正在将我的对象转换为字节数组。 任何想法? 编辑:我正在使用Jersey 1.15
我正在开发的API是在spring Boot中开发的。现在我有了一个API,我必须在其中发送响应,其中包含一个二进制文件和XML。两者将被多部分边界分开。那么有没有办法做到这一点呢?
问题内容: 我有一个Java控制器,必须向我发送一些文本数据和不同的字节数组。因此,我正在构建n多部分请求,并将其写入到HttpServletResponse的流中。 现在我的问题是如何在客户端解析响应并提取多个部分。 服务器代码片段:- 客户代码片段:- 我检查了CloseableHttpResponse和HttpEntity,但是它们都不提供解析多部分请求的方法。 编辑1:这是我在客户端流中收
我有一个java控制器,它必须向我发送一些文本数据和不同的字节数组。因此,我正在构建一个多部分请求,并将其从HttpServletResponse写入流。 现在我的问题是如何在客户端解析响应并提取多个部分。 服务器代码片段:- 客户端代码段:- 我检查了CloseableHttpResponse和HttpEntity,但它们都没有提供解析多部分请求的方法。 编辑1:这是我在客户端流中收到的示例响应
在SpringMVC项目中,客户机发送一个带有序列化对象的请求,客户机本身是一个小程序,所以它不希望收到一个web页面作为响应,而是一个带有字符串对象的响应,该响应将告诉他这是成功还是失败。那么解决方案是什么呢?我想在@Controller中使用返回void的方法,或者返回不存在页面的方法?(在这两种情况下,我还想知道是否有回复给客户)