使用org.springframework.web.filter.CharacterEncodingFilter配置请求编码方式,使用@RequestBody接受ajax的application/json;charset=utf-8 传输中文乱码,配置如下
<filter>
<filter-name>springUtf8Encoding</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>springUtf8Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
疑问:使用String data = URLEncoding.encode('数据',ISO-8859-1);
再URLDecode.decode(data,utf-8);即可得到正确的中文数据,我理解为tomcat将请求按照默认的编码ISO-8859-1来解析了,确实我也没有设置tomcat的默认编码格式,但是我同个项目的其它非ajax请求中文正常,猜测可能是CharacterEncodingFilter配置的没有拦截到我的请求,前辈帮忙看看哪里配置错了。还有个问题就是tomcat设置的默认编码类型和CharacterEncodingFilter设置的编码类型,是否有优先级的说法?
怪我咯2017-04-18 09:52:24
@RequestBody
이 주석을 사용하고 있다는 것은 포스터가 get
방식을 사용하고 있지 않다는 의미입니다. 매개변수가 URL
에 없으면 URLEncoding.encode
을 사용할 필요가 없습니다.
여기서 인코딩을 설정하시면 충분합니다.
forceEncoding
은 true
이며 response
매개변수에 영향을 주지 않는 request
의 인코딩을 설정합니다.
CharacterEncodingFilter
의 실행 과정과 Filter
의 실행 순서를 자세히 살펴보시기 바랍니다.