Фильтр charset Spring MVC устанавливает только кодировку тела запроса, а не кодировку URI запроса. Вам необходимо установить кодировку для кодировки URI в конфигурации servletcontainer. Многие сервлетконтейнеры по умолчанию используют ISO-8859-1 для декодирования URI. Непонятно, какой сервлетконтейнер вы используете, поэтому вот только пример для Tomcat: отредактируйте запись <Connector>
в /conf/server.xml
, добавив URIEncoding="UTF-8"
:
<Connector ... URIEncoding="UTF-8">
Если по какой-то причине вы не можете редактировать конфигурацию сервера (например, сторонний хостинг и т. Д.), Вам следует рассмотреть возможность использования POST вместо GET:
String query = "p1=" + URLEncoder.encode("団", "UTF-8");
URLConnection connection = new URL(getCodeBase(), "MyServlet").openConnection();
connection.setDoOutput(true); // This sets request method to POST.
connection.getOutputStream().write(query.getBytes("UTF-8"));
// ...
Таким образом, вы можете в doPost()
использовать ServletRequest#setCharacterEncoding()
, чтобы сообщить сервлетному API, какой набор символов использовать для анализа тела запроса (или просто полагаться на фильтр набора символов Spring MVC при выполнении этой работы) :
request.setCharacterEncoding("UTF-8");
String p1 = request.getParameter("p1"); // You don't need to decode yourself!
// ...
Смотри также: