2011-03-26 4 views
9

GET isteğinde yay mvc ve özel karakter karakterlerini kullanarak bir sorunum var. aşağıdaki yöntemi düşünün:Parametre Kodlaması Al

@RequestMapping("/update") 
public Object testMethod(@RequestParam String name) throws IOException { 
    } 

ki ben mesela bir "A" (Alman çift noktalı) içeren isimde bir GET isteği göndermek için. Tarayıcı "ä" ile %C3%A4 arasında eşleştiğinden, "ä" yayının alınmasıyla sonuçlanır.

Doğru kodlanmış dizeyi denetleyiciye nasıl alabilirim?

Yardımlarınız için teşekkürler!

+1

Nasıl URL kodlanmış çalıştırmak: 8, UTF- erkek kedi

mvn -Dmaven.tomcat.uriEncoding =

? Burada sadece bir standart kodlama var: utf-8, gerektiğinde% kodlanmış. – bmargulies

+0

İstek URL'si, "...% C3% A4" – Erik

cevap

7

Buna ne dersiniz? Yardımcı olabilir mi?

<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: senin web.xml yılında

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

olarak kodlanmıştır. Yaylı olarak gelen ve tanımladığınız şeyi yapan org.springframework.web.filter.CharacterEncodingFilter filtresini denedim. Ne yazık ki sonuçsuz. – Erik

+0

Çok garip .. Başka ne olduğunu anlayamıyorum. – Rihards

+1

Belki de tarayıcıdan gelen veriler * utf-8 * değildir, çünkü form sayfası * utf-8 değildir *. – bmargulies

41

bu sorunu yaşıyorsanız, istek vücut kodlama ve URI ayırt çünkü kodlaması. CharacterEncodingFilter, vücut kodlamasını ayarlar, ancak URI kodlamasını değil.

Tomcat sunucunuzdaki tüm bağlaçlarınızda URIEncoding = "UTF-8" özelliğini bir öznitelik olarak ayarlamanız gerekir. Bkz: http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html

Veya alternatif olarak, useBodyEncodingForURI = "True" değerini ayarlayabilirsiniz. Eğer maven tomcat eklenti kullanarak ediyorsanız

, sadece bu parametreyi ekleyin:

+1

Tomcat'i doğrudan konnektör kullanmadan kullanıyorum. Açıkladığınız çözüm hala işe yarayabilir mi? – Erik

+1

Bu cevap bana çok zaman kazandırdı, teşekkürler! – olan

+0

İyi nokta burada. – onigunn