2011-03-26 13 views
9

प्राप्त करें मुझे एक जीईटी अनुरोध में वसंत एमवीसी और विशेष वर्णों का उपयोग करने में समस्या है। निम्न विधि पर विचार करें:पैरामीटर एन्कोडिंग

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

जो मैं GET अनुरोध एक 'ए' (जर्मन ऊमलायूट) युक्त नाम के साथ, उदाहरण के लिए भेजने के लिए। इसके परिणामस्वरूप वसंत "ä" प्राप्त होता है क्योंकि ब्राउज़र "ä" से %C3%A4 पर नक्शा बनाता है।

तो, मैं अपने नियंत्रक को सही एन्कोडेड स्ट्रिंग कैसे प्राप्त कर सकता हूं?

आपकी मदद के लिए धन्यवाद!

+1

कैसे यूआरएल इनकोडिंग चल सकता है? यहां केवल एक मानक एन्कोडिंग है: utf-8,% -encoded आवश्यकतानुसार। – bmargulies

+0

अनुरोध यूआरएल को '...% C3% A4' – Erik

उत्तर

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 फ़िल्टर किया है। कैरेक्टर एन्कोडिंगफिल्टर जो वसंत के साथ आता है और जो आप वर्णन करते हैं वह करता है। दुर्भाग्य से परिणाम के बिना। – Erik

+0

बहुत अजीब .. यह पता नहीं लगा सकता कि यह और क्या हो सकता है। – Rihards

+1

शायद ब्राउज़र से आने वाला डेटा * utf-8 * नहीं है क्योंकि फॉर्म पेज * utf-8 * नहीं है। – bmargulies

41

आप इस समस्या हो रही है, क्योंकि अनुरोध शरीर एन्कोडिंग और यूआरआई बीच अंतर एन्कोडिंग। एक कैरेक्टर एन्कोडिंगफिल्टर बॉडी एन्कोडिंग सेट करता है, लेकिन यूआरआई एन्कोडिंग नहीं।

आपको अपने टॉमकैट सर्वर.एक्सएमएल में अपने सभी कनेक्टरों में एक विशेषता के रूप में URIEncoding = "UTF-8" सेट करने की आवश्यकता है। यहां देखें: http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html

या, वैकल्पिक रूप से, आप उपयोग को सेट कर सकते हैं BodyEncodingForURI = "True"।

आप Maven बिल्ला प्लगइन का उपयोग कर रहे हैं, तो सिर्फ इस पैरामीटर जोड़ें:

mvn -Dmaven.tomcat.uriEncoding = UTF-8 बिल्ला:

+1

मैं सीधे कनेक्टर के बिना टोमकैट का उपयोग कर रहा हूं। क्या आपके द्वारा वर्णित समाधान अभी भी काम कर सकता है? – Erik

+1

इस उत्तर ने मुझे बहुत समय बचाया, धन्यवाद! – olan

+0

यहां अच्छा बिंदु। – onigunn

संबंधित मुद्दे