IE中@responseBody出现文件下载的解决办法

时间:2021-11-07 15:30:46

优秀的程序员应该经得起IE的折腾。

对于IE,开发人员也不能说什么,虽然很烂,确实很烂,特别是IE8之前的,但是客户喜欢用也没办法。

 

这不,easyui中form提交,对于success方法就是个比较纠结的问题。或者说,对于Spring中的@ResponseBody返回的Json就是个比较麻烦的问题。

 

首先说说@ResponseBody是干嘛的,这个注解将返回值转化为json字符串,而且在返回时添加response头信息,类似于设置 response.setContentType("application/json; charset=UTF-8");"),但是json这玩意儿IE不认识,就当做文件处理咯,也就会弹出“是否下载”的对话框来。

IE中@responseBody出现文件下载的解决办法

既然是@ResponseBody注解上的问题,也就是说,在@ResponseBody对应的controller里面设置的头部信息肯定会在外面被覆盖掉。肿么办呢,还好Spring确实考虑了这一点。

	<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" validator="validator">
		<!-- 这里配置IE的json格式兼容性 -->
	   <mvc:message-converters register-defaults="false">
               <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
               <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                  <property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
               </bean>
               <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                  <property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
               </bean>
            </mvc:message-converters>
	</mvc:annotation-driven>


这里可以明显的看出设置了“text/plain;charset=UTF-8”,这样的话,返回的值就不再是那种"application/Json"了。这种IE还是认识的。

 

希望对大伙有帮助。