2011-03-26 34 views
9

我在GET請求中使用spring mvc和特殊字符時出現問題。考慮以下方法:例如,我向其發送名稱包含「ä」(德語變音符號)的GET請求,並向其發送GET請求。由於瀏覽器將「ä」映射到%C3%A4,導致春天收到「Ã」。獲取參數編碼

那麼,我怎樣才能得到正確的編碼字符串我的控制器?

感謝您的幫助!

+1

是如何URL編碼?這裏只有一種標準編碼:utf-8,根據需要編碼%。 – bmargulies 2011-03-26 23:13:08

+0

請求的URL編碼爲'...%C3%A4' – Erik 2011-03-28 14:57:16

回答

7

這是怎麼回事?它可以幫助嗎?

在你的web.xml

<filter> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <filter-class>com.example.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>CharacterEncodingFilter</filter-name> 
     <servlet-name>dispatcher</servlet-name> 
    </filter-mapping> 

com.example.CharacterEncodingFilter

public class CharacterEncodingFilter implements Filter { 

    protected String encoding; 

    public void init(FilterConfig filterConfig) throws ServletException { 
     encoding = filterConfig.getInitParameter("encoding"); 
    } 

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 
      FilterChain filterChain) throws IOException, ServletException { 

     HttpServletRequest request = (HttpServletRequest) servletRequest; 
     request.setCharacterEncoding(encoding); 

     filterChain.doFilter(servletRequest, servletResponse); 
    } 

    public void destroy() { 
     encoding = null; 
    } 

} 
+2

我已經試過過濾器org.springframework.web.filter.CharacterEncodingFilter,它隨Spring一起提供,並執行您的描述。不幸的是沒有結果。 – Erik 2011-03-27 11:11:51

+0

非常奇怪..不知道它可能是什麼。 – Rihards 2011-03-27 12:49:14

+1

也許來自瀏覽器*的數據不是utf-8 *,因爲表單頁面*不是utf-8 *。 – bmargulies 2011-03-28 15:01:08

41

您遇到這個問題,因爲請求體編碼和URI區分編碼。 CharacterEncodingFilter設置正文編碼,但不設置URI編碼。

您需要設置URIEncoding =「UTF-8」作爲Tomcat server.xml中所有連接器的屬性。看到這裏:http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html

或者,或者,您可以設置useBodyEncodingForURI =「True」。

如果您正在使用Maven的Tomcat插件,只需要添加此參數:

MVN -Dmaven.tomcat.uriEncoding = UTF-8 tomcat的:運行

+1

我直接使用Tomcat而沒有連接器。你所描述的解決方案是否仍然有效? – Erik 2011-04-04 08:22:43

+1

這個答案給我節省了很多時間,謝謝! – olan 2011-06-01 14:23:42

+0

這裏很好。 – onigunn 2011-08-29 15:17:10