Spring 接收到控制器请求中非unicode字符的错误表示形式(“xD0”和“xD0”和“xBE”,而不是“x421”和“x44B”和“x440”)
这是我的控制器:Spring 接收到控制器请求中非unicode字符的错误表示形式(“xD0”和“xD0”和“xBE”,而不是“x421”和“x44B”和“x440”),spring,spring-mvc,web,Spring,Spring Mvc,Web,这是我的控制器: @RequestMapping(value = "/item/products", method = RequestMethod.GET) @ResponseBody public ProductDto[] getProducts(Pageable pageable, @RequestParam(value = "searchDto", required = false) String serializedDto) throws IOException { 我提出以下请求:
@RequestMapping(value = "/item/products", method = RequestMethod.GET)
@ResponseBody
public ProductDto[] getProducts(Pageable pageable, @RequestParam(value = "searchDto", required = false) String serializedDto) throws IOException {
我提出以下请求:
...item/products?page=0&size=10&sort=status,asc&sort=id,asc&searchDto={"name":"Сыр"}
“Сыы”-西里尔语
在控制器中,我收到以下信息:
serializedDto = {"name":"Ðо"}
与此相反:
serializedDto = {"name":"Сыр"}
问题是在编码方面,我尝试了很多方法,但都不起作用。
我做错了什么?如果您需要更多代码/资料,我将提供。将
字符编码过滤器
的实例注册为ServletFilter
。在典型的spring mvc java配置中,您将有一个AbstractAnnotationConfigDispatcherServletInitializer
类的扩展,如下所示:
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] { characterEncodingFilter};
}
传统的spring mvc应用程序的web.xml
如下:
<filter>
<filter-name>encodingFilter</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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@Configuration
public class WebConfig {
@Bean
public Filter CharacterEncodingFilter() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return CharacterEncodingFilter;
}
}
将
CharacterEncodingFilter
的实例注册为ServletFilter
。在典型的spring mvc java配置中,您将有一个AbstractAnnotationConfigDispatcherServletInitializer
类的扩展,如下所示:
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] { characterEncodingFilter};
}
传统的spring mvc应用程序的web.xml
如下:
<filter>
<filter-name>encodingFilter</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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@Configuration
public class WebConfig {
@Bean
public Filter CharacterEncodingFilter() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return CharacterEncodingFilter;
}
}
如果使用Tomcat,则默认情况下忽略了URL参数编码。对于maven插件,添加下一个配置:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>utf-8</uriEncoding>
</configuration>
</plugin>
org.apache.tomcat.maven
如果您使用的是Tomcat,那么默认情况下,它忽略了URL参数编码。对于maven插件,添加下一个配置:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>utf-8</uriEncoding>
</configuration>
</plugin>
org.apache.tomcat.maven
我在web.xml
中已经有了该代码,并且刚刚添加了@Bean配置,问题仍然存在。我在web.xml
中已经有了该代码,并且刚刚添加了@Bean配置,问题仍然存在。