我无法使请求编码正常工作。为了使编码正常工作,我在spring安全性中添加了过滤器:
@Bean public CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); return filter; } @Override protected void configure(HttpSecurity http) throws Exception { http.addFilterBefore(characterEncodingFilter(), CsrfFilter.class); ... }
将meta添加到我的页面:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> ...
将UriEnconding添加到tomcat 8:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" connectionTimeout="20000" redirectPort="8443" />
但它没有回应任何人。当我发送请求并对其进行调试时,结果是错误的。例如,当我بای作为请求表的一部分发送时,我将收到باÛ结果。我缺少配置的任何部分吗?
بای
باÛ
当发送有效负载ajax请求(与其他客户端和其他方法一起使用)时,它可以正常工作,但是表单数据没有运气。我的控制器如下所示:
@RequestMapping(value = "/test1") @ResponseBody public String test1(@RequestBody String req) { return req; } @RequestMapping(value = "/test2") @ResponseBody public String test2(@RequestParam("search") String req) { return req; }
不同的尝试:
Content-Type=application/json
Content-Type=application/x-www-form-urlencoded
看来问题仅在于POST方法。有什么建议么?
在深入研究许多过滤器链并在其中移动了字符编码之后,终于找到了问题。另一个过滤器是在启动字符编码之前更改编码。
我只是从spring security手中获得了过滤器,然后将其手动添加为bean来为我做过滤:
@Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); registrationBean.setFilter(characterEncodingFilter); return registrationBean; }
2天或搜索和尝试,只是一个简单的答案。很难找到答案
-更新-
如果您使用的是Spring Boot 1.2+,则完全不需要CharacterEncoding。默认情况下,它处于理想位置,字符编码等于utf8。因此,下次,只要设置属性(如有)即可!要设置的属性是:
# HTTP encoding (HttpEncodingProperties) spring.http.encoding.charset=UTF-8 # the encoding of HTTP requests/responses spring.http.encoding.enabled=true # enable http encoding support spring.http.encoding.force=true # force the configured encoding
-更新2 —
来自Tomcat Wiki:Tomcat 8从8.0.0(具体来说是8.0.0-RC3)开始,URIEncoding元素上的attribute 的默认值取决于“严格遵守servlet”设置。URIEncoding的默认值(严格符合性已关闭)为now UTF-8。如果启用了“严格遵守servlet”,则默认值为ISO-8859-1。
Tomcat 8
URIEncoding
UTF-8
ISO-8859-1
概括地说,不需要在Tomcat Config neigter中设置UriEncoding。