我正在研究一个项目,该项目主要基于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
,在记事本中显示为é
。
我尝试了以下操作-
将jackson-databind
从2.4.1更新到2.8.11.2-无效
在int-http:request-mapping consumes="application/json" produces="application/json;charset=UTF-8"
中设置int-http:inbound-gateway
-无效
在Tomcat的setCharacterEncodingFilter
中启用UTF-8
至web.xml
-无效
从Spring 4.1.2迁移到4.3.16时,是否需要更改某些内容以进行正确的字符编码?
谢谢!
答案 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>
有趣的是,在春季升级之前不需要这样做。但是,它现在可以正常工作。