为什么@ResponseBody向前台传JSON输数据会有乱码
首先要知道乱码的原因是在入参之前就应经决定的,就是springMVC 中HandlerMapping会找到对应的handel(即具体去处理请求的方法) ,但是请注意!在真正调用处理请的handle的来处理请求前,或者确切的说是在请求的参数未绑定到入参的方法上的时候,springMVC完成了数据转换,格式化的校验,其中数据的转换springMVC使用的是HttpMessageConvert<T>接口,主要负责将请求信息转化为一个对象(类型为T)再通过对象(类型为T)输出响应信息,用大白话说就是,我吧这个请求的信息转化成一个对象后,然后用这个对象的方法输出响应信息
举个栗子 ! StringHttpMessageConveter就是此接口的一个实现类,他就是用来将请求的信息转成String 类型的对象,然后设置响应的字符码,但是他默认的是iso-8859-1 所以返回JSON数据的时候会乱码
解决办法1 在入参的RequestMapping(producess={"application/json;charset=UTF-8"}) 这是定义了返回制定的内容类型 此时会根据http 请求中的Accept 进行匹配,如果匹配上就会以UTF-8格式转化
解决办法2 同时解决返回的数据时间的格式处理,这里使用的是fastJson
配置
<mvn:annotion-driven>
<bean class="org.springframework.http.StringHttpMessageConverter">
<property name="supprotedMediaTypes">
<list>
<value>application/json;charset=UTF-8 </value>
</list>
</property>
</bean>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supprotedMediaTypes">
<list>
<value>text/html;charset=UTF-8 </value>
<value>application/json</value>
</list>
</property>
<property name="features">
<list>
<!--输出日期的转换器-->
<value>WriteDataUseDataFormat</value>
</list>
</property>
</bean>
如果不想加fastJson 的配置可以使用@JSONFiled(format = "yyyy-MM-dd")标注在实体类对应的时间字段上
</mvn:annotion-driven>