У меня есть несколько конечных точек REST, которые возвращают объекты JSON. Для большинства языков ответы верны (все символы правильно отображаются в ответе, а Content-Type - application / json).
Если я предоставлю заголовок Accept-Language со значением «en_NL», заголовок Content-Type изменится на «application / json; charset = ISO-8859-1». Тело ответа также содержит неправильные закодированные символы. (Например, € превращается в â ‚¬).
Я не уверен, где изменяется заголовок типа содержимого, и я не могу найти никаких следов ни в одном фильтре / конфигурации или jaxb.
Для (не) маршаллинга я использую jaxb. Приложение создано с использованием Spring 4.1.7 и размещено на сервере tomcat.
Пример контроллера:
@RequestMapping(value = "/by-bundle", method = RequestMethod.GET)
@ResponseBody
public SbMessageMap getByBundleCodes(final @RequestParam("groups") String[] groups) {
// return json object here
}
Заранее спасибо!
Я могу добавить тип контента в фильтр, но это было бы грязным решением.
Что ж, я бы сказал, что если служба создает сообщения в кодировке UTF-8, то на самом деле было бы более чистым решением явно заявить об этом.
Вы пытались установить кодировку с параметром productions в @RequestMapping?
@RequestMapping(value = "/by-bundle", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
Я бы предпочел не настраивать все конечные точки, которые в настоящее время доступны в проекте. Спасибо за ответ!
@CornelJanssen Вместо этого вы можете добавить кодировку в bean-компонент или конфигурацию, чтобы вам не пришлось изменять все конечные точки. См. stackoverflow.com/a/9394539/4614788, stackoverflow.com/a/51474450/4614788 и stackoverflow.com/a/39913506/4614788.
Я не очень хорошо знаю Spring, но вместо того, чтобы отслеживать, как определяется кодировка, вы могли бы просто установить для нее фиксированное значение, такое как UTF-8.