JAX-RS-кодирование

Я использую JAX-RS для создания веб-сервиса (остального), который возвращает результаты в формате JSON.

Все ок, кроме кодировки.

Например, я получаю:

 ..., parameter:"Dep\u00f3sitos" ,...

Вместо:

 ..., parameter:"Depósitos" ,...

Я пробовал использовать:

@Produces("application/json; charset=UTF-8")

но проблема остается. Если я верну его как XML, используя только:

@Produces("application/xml")

Все в порядке.

Что мне нужно установить, чтобы получить правильный тип?


person RedEagle    schedule 02.03.2011    source источник
comment
Можете ли вы отредактировать свой вопрос, чтобы включить фактический код вашего метода JSON?   -  person Jim Ferrans    schedule 04.03.2011


Ответы (3)


Все, что вам нужно, это:

String back = "Depósitos";
return new String(back.getBytes(), "UTF8");
person Frank    schedule 14.03.2014
comment
Это бесполезный и опасный код. String.getBytes() преобразует строку в кодировку платформы по умолчанию. Допустим, вы используете Windows, так что это может быть CP1252. Затем вы создаете новый объект String из этих байтов и указываете Java, что байты должны интерпретироваться как UTF-8, даже если в этом примере байты являются CP1252 текстом, что приведет к проблемам. Далее: back уже является строкой, объекты Java String можно рассматривать как текст без кодирования (внутренне они кодируются с помощью UTF-16, но это не имеет значения). Кодировки становятся важными только тогда, когда строка преобразуется в байты. - person Sky; 06.03.2018

В итоге я использовал GSON вместо IBM JSON4J, который оказался намного лучше в обработке пользовательской сериализации классов Java.

person RedEagle    schedule 09.03.2011

Взгляните на ответ Брайанта Лука на вопрос "Как установить кодировку с помощью JAX-RS?" и посмотрите, поможет ли это.

person bamana    schedule 02.03.2011