2016-10-24 38 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來避免這個問題 –