Страницы

Поиск по вопросам

среда, 11 декабря 2019 г.

Проблемы с кодировкой в Spring 3 MVC

#java #spring #spring_mvc


Здравствуйте. Пытаюсь сделать вот что:
@RequestMapping(value = "/something")
@ResponseBody
public String helloWorld() {
    return "Русский текст";
}

Страница принимает Примерно это:
??????? ?????

На странице кодировка UTF-8. Но даже если бы она и другой была бы, то были бы в любом
случае не вопросительные знаки. Посоветуйте, пожалуйста, как исправить ситуацию.
Дополню вопрос: Очень странно получилось в такой ситуации:
@RequestMapping(value = "/something")
public ResponseEntity helloWorld() {
    MyCls cls = new MyCls();
    cls.setStr("Русский текст");

    HttpHeaders h = new HttpHeaders();
    return new ResponseEntity(cls, h, HttpStatus.OK);
}

Сейчас сработало так, как я и ожидал:
{"str":"Русский текст"}

У спринга что, на тип String аллергия?    


Ответы

Ответ 1



Похоже, это известная проблема (аналогичный вопрос на SO, баг в джире), решается она несколькими способами: так, как указал @Nofate - использовать ResponseEntity с соответствующими заголовками; добавить конвертер в hw-servlet.xml (код ниже); забабахать свой конвертер с блекдж... (как тут). Сконфигурированный конвертер: В ответе на SO говорится, что второй метод не сработает с mvc:annotation-driven - не знаю, у меня заработало и с ним. UPD. Ага, с mvc:annotation-driven не заработает, если поставите конвертер после этого объявления.

Ответ 2



В web.xml добавить сам фильтр: characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true characterEncodingFilter /* В параметрах подключения к базе, добавить следующий код: jdbc:mysql://localhost:3306/dataBaseName?characterEncoding=UTF-8

Ответ 3



Проверьте на всякий случай кодировку самого файла с исходником. Знаки вопроса - верный признак попытки интерпретировать cp1251-строку в качестве UTF-строки. -- UPD1. Все, что пока получилось, это: public ResponseEntity preview(HttpServletResponse response) { HttpHeaders h = new HttpHeaders(); h.add("Content-type", "text/html;charset=UTF-8"); return new ResponseEntity("Привет мир",h ,HttpStatus.OK); }

Ответ 4



Добавлю от себя еще. Если вы используете обработку ошибок @ExceptionHandler и вам нужен русский текст, например в ошибках sql от бд на фронте и передаете их например в формате json, то также нужно добавить в ..-servlet.xml: text/plain;charset=UTF-8 text/html;charset=UTF-8 application/json;charset=UTF-8 application/x-www-form-urlencoded;charset=UTF-8 text/plain;charset=UTF-8 text/html;charset=UTF-8 application/json;charset=UTF-8 application/x-www-form-urlencoded;charset=UTF-8 Ну и maven зависимости: com.fasterxml.jackson.core jackson-databind 2.8.3 Подтверждаю, работает с , объявленном после бинов. Может кому пригодится. Мой пост по этой теме

Ответ 5



Если используется Tomcat, то в server.conf (по-моему так файл называется) надо поправить коннектор, по которому вы работаете - добавить URIEncoding="UTF-8".

Ответ 6



В дескрипторе приложения необходимо добавить фильтр: encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true

Комментариев нет:

Отправить комментарий