Spring MVC编码非英语参数

时间:2016-10-24 07:11:29

标签: java spring rest spring-mvc

我使用spring MVC来获取@PathVariable的参数,如下所示:

@GetMapping("/users/{username}")
public Boolean getUser(@PathVariable("username") String username)
{
     // do some works
}

当我的输入参数不是英语(例如阿拉伯语)时,我无法获得正确的参数值和用户名参数包含无效的ASCII码。另外,我确信客户端以UTF-8格式发送请求URL。

我测试弹簧字符编码过滤器来解决它,但它不起作用。

<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>  
    <init-param>  
       <param-name>forceEncoding</param-name>  
       <param-value>true</param-value>  
    </init-param>  
</filter>  
<filter-mapping>  
    <filter-name>encodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping> 

我使用@RequestsParam和HttpServletRequest测试我的代码,但是它们都返回了无效字符,我也使用了URLEncoder.encode和URLDecoder.decode,但可以解决问题。

2 个答案:

答案 0 :(得分:1)

我通过使用此代码使用ISO_8859_1字符集来解决我的问题:

username = new String(username.getBytes(CharSets.ISO_8859_1));
但是,我真的不知道是什么原因?我希望使用UTF-8编码来获取正确的参数值,但它不起作用。

答案 1 :(得分:0)

当请求使用GET方法时,encodingFilter无效。您应该配置应用服务器的URIEncoding.eg:Modify Tomcat的server.xml,添加URIEncoding。 <Connector URIEncoding="UTF-8" port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />