Spring MVC. Неправильная кодировка данных формы

 
 
 
Сообщения:945
Очень странно!...
Проблемы с веб-приложением. Вроде фильтры настроил как надо, и Томкату server.xml подправил - в общем всё вроде в соответствии с FAQ.
А русские символы в строки преобразуются в неправильной кодировке. Например, вот так:
Отправляем "ааппрр" - 6 символов - получаем "ааппÑ�Ñ�".
Причём это именно если передаем данные формы! POST-запросом. Если json передаем и маппим на объект, то всё ок.

Коротко о себе:
Java 1.8
Tomcat 8
Spring 4.3

Кто что может подсказать?

Код формы выглядит просто (хотя я что только не пробовал уже)
<form id="form" action="/test/form" method="POST">
  <input name="teststring" />
  <button type="submit">Отправить</button>
</form>


web.xml
...
    <filter>
        <filter-name>encoding-filter</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>encoding-filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
...


server.xml (Tomcat 8)
...
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="30000"
			   maxKeepAliveRequests="300"
			   socket.appReadBufSize="2048"
			   socket.appWriteBufSize="2048"
			   maxThreads="32000"
               redirectPort="8443" 
			   URIEncoding="UTF-8" />
...

"Знать может каждый дурак... Дело в том, чтобы понять." А. Эйнштейн.
 
 
Сообщения:595
так выглядят русские буквы в кодировке ASCII.
это значит, что приходит нормально, а потом показывает неправильно.
 
 
Сообщения:945
windruf:
так выглядят русские буквы в кодировке ASCII.
это значит, что приходит нормально, а потом показывает неправильно.

Ну, как минимум, уходит в нормальном виде. Это-то и не понятно! Бага что ли какая-то...

"Знать может каждый дурак... Дело в том, чтобы понять." А. Эйнштейн.
 
 
Сообщения:595
да где-нибудь забыл: "мамай кланус UTF-8". в принципе хватит одного места.
короче, удачных поисков. и запасись валерьянкой.
 
 
Сообщения:945
Кароч!
1. Оказывается в Томкате, начиная с версии 8.5 параметр URIEncoding вообще теперь не нужен (при одном условии, оставленном для совместимости - кому интересно, гляньте в доки);
2. CharacterEncodingFilter в web.xml должен идти первым в цепочке фильтров. Что важно, вместе с секцией filter-mapping. У меня первым был объявлен springSecurityFilterChain. Поменял объявления фильтров местами - полегчало;
3. Данные формы в контроллере нужно забирать из HttpServletRequest а не переменной под аннотацией @RequestBody. )))
Теперь-то до меня это дошло почему - собственно CharacterEncodingFilter не делает ничего другого, кроме установки классу HttpServletRequest соответствующего свойства..
Возможно третий пункт можно как-то иначе решить, поиграв параметрами http формы, пока не знаю, я не силён в фронтэнде к сожалению.

"Знать может каждый дурак... Дело в том, чтобы понять." А. Эйнштейн.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет