2013-06-01 2 views
0

Я новичок в REST и джерси. Я написал простой веб-сервис RESTful с использованием API Джерси 1.17. Веб-служба принимает данные через метод POST. Когда я передаю данные с символами, отличными от ascii, они не читают их правильно.Джерси веб-сервис non-ascii символов

@POST 
@Path("hello") 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED + ";charset=UTF-8") 
public Response hello(@FormParam("message") String message) {  
    System.out.println(message);   
    return Response.status(200).entity("hello" + message).build();  
} 

Когда я передаю данные с символами, отличными от ascii, в сообщении параметра, оно не печатает его правильно.

curl --data "message=A função, Ãugent" http://localhost:8080/search/hello/ 

метод POST печатает «Весело ?? о,? Ugent»

ответ

0

Я не думаю, что Джерси заботится о кодировке, которая определена в @Consumes. Я думаю, что Джерси просто использует метод request.getParameter, который использует кодировку запроса для разрешения параметров.

У вас есть много вариантов, чтобы установить кодировку:

  • В случае контейнер сервлетов поддерживает, установить кодировку по умолчанию соединителя
  • Установить кодировку по умолчанию JVM в utf8
  • Создать Сервлет-фильтр, который ловит этот вызов и вызывает request.setCharacterEncoding («UTF8»); В этом случае вы должны убедиться, что setCharacterEncoding вызывается перед любой другой функцией getter (например, getParameter), поскольку кодировка символов задается во время первого вызова на запрос.
  • Сделайте преобразование значения параметра вручную. Вы можете получить ServletRequest и запросить кодировку. После этого вы можете сказать:

новый String (message.getBytes (currentEncoding), "UTF8");

В вашем случае я предпочел бы третий вариант.

Смежные вопросы