从4.1.2升级到Spring 4.3.16后特殊字符损坏

时间:2018-10-25 18:31:14

标签: spring spring-integration

我正在研究一个项目,该项目主要基于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。迁移后,特殊字符显示变形。邮递员对此服务的请求返回\ufffd来代替字符和标头Content-Type →application/json

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

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

我尝试了以下操作-

  1. jackson-databind从2.4.1更新到2.8.11.2-无效

  2. int-http:request-mapping consumes="application/json" produces="application/json;charset=UTF-8"中设置int-http:inbound-gateway-无效

  3. 在Tomcat的setCharacterEncodingFilter中启用UTF-8web.xml-无效

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

谢谢!

1 个答案:

答案 0 :(得分:1)

我能够通过参考Content-Type on http:inbound-gateway response has charset=iso-8859-1 instead of utf-8

解决此问题

我添加了一个标头增强器,其内容类型为UTF-8。

 <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>

有趣的是,在春季升级之前不需要这样做。但是,它现在可以正常工作。