1、SpringMVC中解决@ResponseBody注解返回中文乱码问题
在@RequestMapping()注解内加上produces = “application/json;charset=utf-8”
在spring处理ResponseBody时涉及到org.springframework.http.converter.StringHttpMessageConverter这个类,该类在默认实现中将defaultCharset设为ISO-8859-1。当@RequestMapping标记的方法未配置produces属性时,将自动使用默认编码;如果配置了produces属性,AbstractHttpMessageConverter中的write方法将不会受supportedMediaTypes影响,而用produce设置的header赋值给contenttype。改造一下RequestMappingHandlerAdapter的配置,springMvc.xml如下:
<!-- 必须放在<mvc:annotation-driven>之前 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>applicaiton/javascript;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
原文参考:(3条消息) SpringMVC解决@ResponseBody注解返回中文乱码_@restbody返回不是中文_c.的博客-CSDN博客
2、解决response中文乱码,通知浏览器服务器发送的数据格式
response.setContentType("text/html;charset=utf-8”);
原文链接:(3条消息) SpringMVC中解决@ResponseBody注解返回中文乱码问题_@responsebody 乱码_一234567博的博客-CSDN博客
3、找不到类错误:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter#4b8c8349' defined in class path resource [spring-mvc.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/dataformat/cbor/CBORFactory
解决办法:
在spring-mvc.xml配置文件中,将上图圈起来的类org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter换成org.springframework.http.converter.json.MappingJackson2HttpMessageConverter即可
原文链接:https://blog.csdn.net/junR_980218/article/details/124328479
4、jsp页面get请求和post请求中文乱码问题
tomcat8.5以后版本, get请求方式,request对象使用的字符集默认为utf-8 , post请求方式,request对象使用的编码方式为ISO8859-1。
所以new String(str.getBytes("ISO-8859-1"), charset);出现本来是utf-8编码,用ISO-8859-1取导致乱码。