环境
http客户端:httpclient-4.5.6
应用容器:spring-boot-2.0.4.RELEASE
开发容器:Tomcat8.5(内嵌)
测试容器:Jboss7.1
场景
使用http客户端向服务端发送携带中文参数的POST请求
// 伪代码
HttpEntity e = new StringEntity("city=重庆", "UTF-8");
post.setEntity(e);
httpClient.execute(post);
服务端打印入参代码
@RestController
public class FakeController {
@PostMapping("/say")
public String say(@RequestParam String city) {
LogFactory.getLogger().info("city:{}", city);
return city;
}
}
在tomcat上正常显示
2019-12-26 16:02:24.728 INFO [city:重庆]
在jboss上显示乱码
2019-12-26 16:02:24.728 INFO [city:←ヌヘ¥ᄎニ]
猜想
- 服务器未设置URIEncoding
- 服务器容器对于请求做了特殊处理
验证
猜想1 (不起作用)
官网的解决办法是在standalone.xml中加入以下内容(extensions节点后面)
<system-properties>
<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>
猜想2
根据《Web容器自动对HTTP请求中参数进行URLDecode处理》1的思路,我得知在真正处理Htt