# 后台返回json格式返回在IE出现文件下载问题
最近在做一个文件上传时候遇到请求返回出现文件下载的情况,整理一下由于IE不支持Content-Type为application/json格式的返回类型,而上传时候设置请求Content-Type为multipart/form-data; 使用@ResponseBody就会将请求的返回Content-Type为application/json格式。具体的解决方法
方法1:去掉responseBody,然后自己定义response来设置返回值
###
@RequestMapping(value="{id}",method=RequestMethod.POST)
//@ResponseBody
public void update(@RequestParam(value = "sealfile") MultipartFile file, TSeal seal,HttpServletResponse response) throws TZException{
……
response.getWriter().write("{\"message\":\"成功\",\"status\":\"success\"}");
}
###
如上代码去掉@ResponseBody,然后在参数中添加HttpServletResponse response,通过response来设置返回值response.getWriter().write()
方法2:在sping中配置json时候的返回格式
###
<mvc:annotation-driven>
<mvc:message-convertersregister-defaults="true">
<beanclass="org.springframework.http.converter.StringHttpMessageConverter"><constructor-argvalue="UTF-8"/>
</bean>
<refbean="mappingJacksonHttpMessageConverter"/><!-- json转换器 -->
</mvc:message-converters>
</mvc:annotation-driven><!—处理避免IE下载json数据 -->
<beanid="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<propertyname="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
###如上,在注解配置mvc:annotation-driven中的mvc:message-converters中引入处理json数据返回的bean,mappingJacksonHttpMessageConverter。
另外关于后台获取数据的说明:在使用form请求的时候,对表单数据封装,在后台直接设置@RequestBody 就可以得到form表单name和实体的对应,但是在添加文件属性type="file"之后,设置了form标签中添加multipart/form-data,然后请求的ContentType就变成了键Content-Type :multipart/form-data; @RequestBody不能处理这种格式的数据(application/json, application/xml格式可以用@RequestBody来处理的)。所以就不需要@RequestBody来获取表单数据,直接通过实体类型即可。
即 form表单提交的时候有type=file,后台不用@RequestBody