SpringMVC中文乱码踩坑记录

网友投稿 956 2022-12-22

SpringMVC中文乱码踩坑记录

SpringMVC中文乱码踩坑记录

目录问题问题根源解决方案方案一方案二

问题

使用SpringMVC在返回一个字符串时发生了中文乱码问题。produces属性无效

@RequestMapping(value = "/nihao", produces = "text/plain;charset=UTF-8")

@ResponseBody

public String hello(HttpServletResponse response) throws UnsupportedEncodingException {

User user = new User();

user.setSex("男");

user.setName("Clover");

user.setAge(19);

return user.toString();

}

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: text/plain;charset=ISO-8859-1

Content-Length: 36

Date: Sun, 01 Aug 2021 12:20:21 GMT

Connection: close

{

"name": "Clover",

"sex": "?",

"age": 19

}

添加常用的过滤器org.springframework.web.filter.CharacterEncodingFilter依然无法解决

characterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

utf-8

encoding

utf-8

forceEncoding

true

characterEncodingFilter

/*

问题根源

最后查看源码时发现问题出现在处理内容协商的时候,SpringMVC使用了一个叫做org.springframework.http.converter.StringHttpMessageConverter的转换器进行处理java.lang.String。在这个处理器中,有个一默认的编码格式,它甚至使用了final修饰…..

public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

并且,通过Postman或者REST Client发送请求时,Accept默认是*/*。

解决方案

方案一

注册一个StringHttpMessageConverter,注册之后不wvMvqE再使用SpringMVC默认的。它可以将produces设置为Content-Type。也就是说@RequestMapping的produces属性生效了

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Accept-Charset: ...

Content-Type: text/plain;charset=utf-8

Content-Length: 37

Date: Sun, 01 Aug 2021 13:09:35 GMT

Connection: close

{

"name": "Clover",

"sex": "男",

"age": 19

}

方案二

Accept问题,SpringMVC的默认StringHttpMessageConverter处理的是*/*,那手动设置一个Accept尽可能避开它…..

POST {{url}}/nihao HTTP/1.1

Accept: text/plain;charset=utf-8

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: text/plain;charset=utf-8

Content-Length: 38

Date: Sun, 01 Aug 2021 13:20:16 GMT

Connection: close

{

"name": wvMvqE"Clover",

"sex": "男",

"age": 19

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:山东一体化政务服务平台(山东政务服务网一窗通服务平台)
下一篇:车联网车载终端图片(车联网信息终端)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~