后台返回前台字符串中文乱码
背景:使用ssm框架
当后台返回字符串给前台时中文乱码就算设置了
response.setCharacterEncoding(“utf-8”);
response.setContentType(“application/json;charset=utf-8”); 也无效
原因:消息转换器在作怪!!
集合对象走的是MappingJackson2HttpMessageConverter这个转换器,直接将对象传回到前台
字符串走的是StringHttpMessageConverter 这个转换器,然后将字符串用iso-8859-1编码自然就会出现乱码了。
解决
第一:在注解@requestMapping()里面加上:produces="text/html;charset=UTF-8"
@RequestMapping(value="/queryStore7",produces="text/html;charset=UTF-8")
第二:在消息转换器里面配置上指定的编码。
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter" >
<property name = "supportedMediaTypes">
<list>
<value>text/html;charset=utf-8</value>
<value>application/json;charset=utf-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" >
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
细节:
如果把text/html放在前面,返回前台是string的json串,如果把application放在前面,返回到前台是json对象,其实不难理解,
在走StringHttpMessageConverter这个转换器的时候,会拿这个转换器里面的支持的数据类型和请求头可接受的数据类型比对,就是请求头里面的accept,如果比对成功,就不再比对下一个,所以这就可以拿捏的准前台拿到的数据是什么类型了。
JSON转换
json对象——》json字符串:
JSON.stringify(json对象);
json字符串-——》json对象
eval(“(”+json字符串+")"),$.parseJSON(json字符串),JQuery.parseJSON(json字符串),JSON.parse(json字符串);