@ResponseBody
при формировании ответа использует StringHttpMessageConverter
(исправьте, если не прав). И у него по-умолчанию кодировка ISO-8859-1. Соответственно, чтобы клиент мог принять ответ в кодировке utf-8, недостаточно просто поставить фильтр, который бы устанавливал кодировку ответа(ResponseBody
перезаписывает ее на свою дефолтную). Я вижу три варианта:
1) Самый прямолинейный: просто указать кодировку с помощью produces
в @RequestMapping
. Этот способ не нравится, потому что все ответы должны быть в utf-8, а значит ее надо будет указывать вручную на все обрабочтики с аннотацией @ResponseBody
2) Изменить дефолтную кодировку mvc контекста на этапе инициализации:
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) converter).setDefaultCharset(Charset.forName("UTF-8"));
}
}
Хотя это делает то, что мне нужно, я не до конца понимаю, как это может повлиять на работу фреймворка. Не сломаю ли я таким образом что-нибудь. Да и cast вверх выглядит некрасиво
3) Этот способ еще не пробовал, но думаю, такое возможно: установить HandlerInterceptor
(или аспект), который бы конвертировал ответ от обработчиков в utf-8, если кодировка ответа другая. Покрывает минусы первого и второго способов, но производит нагрузку, будучи лишним этапом между сервером и клиентом.
Изучая спринг до этого, мне начало казаться, что он способен предоставить решение для любой не касающейся бизнес-логики задачи. Но тут кажется, что это не предусмотрено. Или я плохо искал? Есть варант по-лучше, и если нет, какой лучший из описанных?
Вы можете просто объявить тот же самый StringHttpMessageConverter
в своей конфигурации с нужной Вам кодировкой. Один из конструкторов StringHttpMessageConverter
принимает параметр Charset defaultCharset
. Объявляете бин с типом HttpMessageConverter и возвращаете new StringHttpMessageConverter(StandardCharsets.UTF_8)
. Либо используете любой другой удобный конвертер.
Spring Boot автоматически конфигурирует StringHttpMessageConverter
с кодировкой UTF-8
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем приветХотелось бы узнать, можно ли при работе с Rest Api всегда использовать только POST заголовки? Или это моветон? Согласно CRUD, на каждую...
При вызове java-программы из командной строки с аргументами в качестве русских символов эти аргументы не распознаются программойЧто можно...
Я использовал библиотеку AndroidX Preference для своего проектаЭтот проект имеет главное меню и подменю
Есть веб форма, в которой есть возможность отправки файла на сервер на сервлетах javaНе могу сообразить, как мне организовать принятие файла...