Получить кодировку параметров - PullRequest
10 голосов
/ 27 марта 2011

У меня проблема с использованием Spring MVC и специальных символов в GET-запросе. Рассмотрим следующий метод:

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

на который я отправляю запрос GET с именем, содержащим, например, «ä» (немецкий умляут). Это приводит к получению «¤» весной, потому что браузер отображает «ä» в %C3%A4.

Итак, как мне получить правильную закодированную строку моего контроллера?

Спасибо за вашу помощь!

Ответы [ 2 ]

44 голосов
/ 31 марта 2011

У вас возникла эта проблема, потому что запрос различает кодировку тела и кодировку 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: запустить

7 голосов
/ 27 марта 2011

А как насчет этого?Это может помочь?

В вашем 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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...