2016-10-24 32 views
1

我使用Spring MVC的由@PathVariable如下得到参数:的Spring MVC编码非英语参数

@GetMapping("https://stackoverflow.com/users/{username}") 
public Boolean getUser(@PathVariable("username") String username) 
{ 
    // do some works 
} 

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

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

<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但可以解决问题。

+0

显示您的DispatcherServler映射? – shazin

+0

\t MVC-调度 / M2E67

回答

1

我解决了使用ISO_8859_1焦炭通过使用此代码设置我的问题:

username = new String(username.getBytes(CharSets.ISO_8859_1)); 

,但是,我真的不知道是什么原因?我期望使用UTF-8编码来获取正确的参数值,但它不起作用。

+0

共,通过使用POST方法这个问题将得到解决 – M2E67

0

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

+0

但是我需要解决这个bug,而不依赖于特殊的web服务器,应用程序应该独立于web服务器,并且可以与Tomcat,Jboss(WildFly),WebLogic等任何服务器一起工作。 – M2E67

+0

通常我选择POST方法和encodingFilter来避免这个问题 –