Плохое кодирование с Tomcat 8

У меня есть Tomcat 8, который извлекает данные из MySQL. Строки в MySQL хорошо закодированы (как тексты на русском языке). Если я отлаживаю сервер, выбранные строки имеют хорошую кодировку. Однако у возвращенного JSON есть плохие символы. Я проверил свой server.xml, и у меня есть:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />

Обратите внимание, что у меня там URIEncoding="UTF-8".

Что еще я могу сделать?


person Ran    schedule 23.08.2016    source источник
comment
Вы настроили какие-либо фильтры сервлетов для кодирования? Рассмотрите возможность использования org.springframework.web.filter.CharacterEncodingFilter   -  person Vladimir Vagaytsev    schedule 23.08.2016
comment
Проверьте это: stackoverflow.com/questions/13504732/   -  person Vladimir Vagaytsev    schedule 23.08.2016
comment
Помогло добавление фильтра! Спасибо!   -  person Ran    schedule 23.08.2016


Ответы (1)


Насколько мне известно, кодирование URI применяется только к URI; это не влияет на кодировку того, что вы отправляете обратно. Вы должны установить правильные заголовки ответа, например, «Content-type: application / json; charset = utf-8».

Вот фрагмент приложения Spring Boot, над которым я работаю, он предназначен для запроса, но может дать вам представление о том, что вам нужно:

private RestTemplate rest = new TestRestTemplate() {{ getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); }};
private HttpHeaders requestHeaders = new HttpHeaders() {{ setContentType(MediaType.APPLICATION_JSON); }};

Если бы вы могли показать свой код, возможно, мы могли бы лучше вам помочь.

person walen    schedule 23.08.2016
comment
Я не понимаю, как мне использовать getMessageConverters? просто использование requestHeaders не помогает. Как установить правильные заголовки ответа? И мой код очень простой. Вплоть до заявления возврата все хорошо. - person Ran; 23.08.2016