首页 > 解决方案 > 从 4.1.2 升级到 Spring 4.3.16 后特殊字符损坏

问题描述

我正在开发一个主要基于 Java 8、Spring 4.1.2、Spring Integration 4.1.0、Spring Security 3.1.2、myBatis 3.2.3 和 Tomcat 8.5 构建的项目。项目中公开了一个 REST GET 方法,该方法返回具有特殊字符的 JSON é

最近我一直在尝试将整个项目升级到 Spring 4.3.16、Spring Integration 4.3.15 和 Spring Security 4.2.4。在此迁移之后,特殊字符出现扭曲。Postman 对该服务的请求返回\ufffd代替字符和标头Content-Type →application/json

在 Spring 升级之前,通过 Postman 对函数的 GET 请求用于返回正确的字符和标头 Content-Type →application/json;charset=UTF-8

相同的 JSON 打印在日志中,特殊字符显示为xE9Notepad++ 和é记事本。

我试过以下 -

  1. 从 2.4.1更新jackson-databind到 2.8.11.2 - 没有用

  2. 设置int-http:request-mapping consumes="application/json" produces="application/json;charset=UTF-8"int-http:inbound-gateway- 没有工作

  3. setCharacterEncodingFilterUTF-8Tomcat 中启用web.xml- 不起作用

从 Spring 4.1.2 迁移到 4.3.16 时,是否需要更改任何内容以进行正确的字符编码?

谢谢!

标签: springspring-integration

解决方案


我可以通过参考http:inbound-gateway 响应上的 Content-Type 来解决这个问题,它有 charset=iso-8859-1 而不是 utf-8

我添加了一个内容类型为 UTF-8 的 header-enricher。

 <int:header-enricher>
        <int:header name="Content-Length" expression="payload.length()"/>
        <int:header name="Content-Type" value="application/json;charset=UTF-8"/>
 </int:header-enricher>

有趣的是,在 Spring 升级之前,这不是必需的。但是,它现在有效。


推荐阅读