У меня также была проблема с кодировкой при использовании Servlet 3 API.После некоторых исследований я обнаружил, что в Tomcat 7 есть ошибка, из-за которой параметры не читаются при правильной кодировке при определенных условиях.Есть обходной путь.Во-первых, вам нужно сказать, какая кодировка на самом деле (если это не стандартная iso-8859-1):
request.setCharacterEncoding("UTF-8");
Это в основном то, что делает CharacterEncodingFilter
в Spring.Пока ничего странного.Теперь хитрость.Вызовите это:
request.getParameterNames()
Убедитесь, что этот метод вызывается до getParts()
.Если вы используете Spring, я думаю, вам нужно сделать это в фильтре, прежде чем запрос закончится в Spring.Порядок, в котором эти методы вызываются, имеет решающее значение.
Обновление: Ошибка Tomcat была исправлена в 7.0.41 и далее, поэтому, если вы используете последнюю версиюTomcat, вам нужно только установить кодировку символов, чтобы получить правильный результат.