Специальный символ не работает после обновления до Spring 4.3.16 с 4.1.2 - PullRequest
0 голосов
/ 25 октября 2018

Я работаю над проектом, который в основном построен на Java 8, Spring 4.1.2, Spring Integration 4.1.0, Spring Security 3.1.2, myBatis 3.2.3 и Tomcat 8.5.В проекте представлен метод REST GET, который возвращает JSON со специальным символом é.

Недавно я пытался обновить весь проект до Spring 4.3.16, Spring Integration 4.3.15 и Spring Security 4.2.4.После этой миграции специальный символ отображается искаженным.Почтальон просит этот сервис вернуть \ufffd вместо символа и заголовка Content-Type →application/json.

Перед обновлением Spring GET запрашивает функцию через Postman, используемую для возврата правильного символа и заголовка Content-Type →application/json;charset=UTF-8

Тот же JSON печатается в журналах, а специальный символ отображается какxE9 в Блокноте ++ и é в блокноте.

Я пробовал следующее -

  1. Обновление jackson-databind с 2.4.1 до 2.8.11.2 -Не работал

  2. Установить int-http:request-mapping consumes="application/json" produces="application/json;charset=UTF-8" в int-http:inbound-gateway - Не работал

  3. Включить setCharacterEncodingFilter в UTF-8 в Tomcat'sweb.xml - Не работает

Есть ли что-то, что нужно изменить для правильной кодировки символов при переходе с Spring 4.1.2 на 4.3.16?

Спасибо!

1 Ответ

0 голосов
/ 26 октября 2018

Мне удалось решить эту проблему, сославшись на Тип содержимого на http: ответ inbound-gateway содержит charset = iso-8859-1 вместо utf-8

Я добавилобогащение заголовка с типом контента как UTF-8.

 <int:header-enricher>
        <int:header name="Content-Length" expression="payload.length()"/>
        <int:header name="Content-Type" value="application/json;charset=UTF-8"/>
 </int:header-enricher>

Интересно, что этого не требовалось до весеннего обновления.Тем не менее, это работает сейчас.

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