SpringMVC中文乱码踩坑记录

 更新时间:2021年08月02日 09:29:32   作者:CloverYou  
这篇文章主要介绍了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依然无法解决

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

问题根源

最后查看源码时发现问题出现在处理内容协商的时候,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,注册之后不再使用SpringMVC默认的。它可以将produces设置为Content-Type。也就是说@RequestMappingproduces属性生效了

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>
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": "Clover",
  "sex": "男",
  "age": 19
}

到此这篇关于SpringMVC中文乱码踩坑记录的文章就介绍到这了,更多相关SpringMVC中文乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决ThingsBoard编译报错问题:Failure to find org.gradle:gradle-tooling-api:jar:6.3

    解决ThingsBoard编译报错问题:Failure to find org.gradle:gradle-too

    这篇文章主要介绍了ThingsBoard编译报错:Failure to find org.gradle:gradle-tooling-api:jar:6.3,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • SpringBoot中yml的数据绑定示例

    SpringBoot中yml的数据绑定示例

    本文主要介绍了SpringBoot中yml的数据绑定示例,借助于YAML的简洁语法和结构化特性,我们能够轻松地管理应用程序的配置信息,使得配置文件更加清晰易读,感兴趣的可以了解一下
    2023-11-11
  • 浅谈Java中随机数的几种实现方式

    浅谈Java中随机数的几种实现方式

    这篇文章主要介绍了Java中随机数的几种实现方式,从最简单的Math.random到多线程的并发实现都在本文所列之中,需要的朋友可以参考下
    2015-07-07
  • 浅谈springboot多模块(modules)开发

    浅谈springboot多模块(modules)开发

    这篇文章主要介绍了浅谈springboot多模块(modules)开发,详细的介绍了springboot多模块的实现,有兴趣的可以了解一下
    2017-09-09
  • mybatis-generator生成文件覆盖问题的解决

    mybatis-generator生成文件覆盖问题的解决

    这篇文章主要介绍了mybatis-generator生成文件覆盖问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • IntelliJ IDEA软件内如何实现更新到最新版本

    IntelliJ IDEA软件内如何实现更新到最新版本

    文章介绍了如何在IntelliJIDEA中更新到最新版本以及如何回到之前忽略的版本,解决办法是通过选择"IgnoreThisUpdate"来跳过旧版本,重复操作即可更新到最新版本
    2024-12-12
  • springboot整合activity自动部署及部署文件命名流程

    springboot整合activity自动部署及部署文件命名流程

    这篇文章主要介绍了springboot整合activity自动部署及部署文件命名流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java中使用opencv的问题

    Java中使用opencv的问题

    这篇文章主要介绍了Java中使用opencv的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Spring 与 JDK 线程池的简单使用示例详解

    Spring 与 JDK 线程池的简单使用示例详解

    这篇文章主要介绍了Spring 与 JDK 线程池的简单使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • SpringBoot集成EasyExcel实现Excel导入的方法

    SpringBoot集成EasyExcel实现Excel导入的方法

    这篇文章主要介绍了SpringBoot集成EasyExcel实现Excel导入的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论