2013-06-01 2 views
0

저는 REST와 저지를 처음 사용합니다. Jersey 1.17 API를 사용하여 간단한 RESTful 웹 서비스를 작성했습니다. 웹 서비스는 POST 메서드를 통해 데이터를받습니다. 비 ASCII 문자가있는 데이터를 전달할 때 올바르게 읽지 않습니다.저지 웹 서비스 비 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();  
} 

'message'매개 변수에 ASCII 이외의 문자가있는 데이터를 전달할 때 올바르게 인쇄되지 않습니다.

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

POST 방식의 인쇄는

답변

0

내가 저지 @Consumes에 정의 된 캐릭터 세트에 대한 배려라고 생각하지 않는다 "재미는? 오? ugent". Jersey는 단순히 요청 인코딩을 사용하여 매개 변수를 해결하는 request.getParameter 메소드를 사용합니다. ,

  • 경우 서블릿 컨테이너가 지원하는
  • 가 작성 UTF8로는 JVM의 기본 인코딩 설정 커넥터
  • 의 기본 인코딩을 설정합니다

    당신은 인코딩을 설정하는 여러 옵션이 있습니다 이 호출을 포착하고 요청을 호출하는 Servlet 필터 request.setCharacterEncoding ("UTF8"); 이 경우 getCharacterEncoding이 getParameter와 같은 다른 getter 함수보다 먼저 호출되도록해야합니다. getParameter와 같이 요청시 첫 번째 get 호출 중에 문자 인코딩이 설정됩니다.

  • 매개 변수 값을 직접 변환하십시오. ServletRequest를 가져 와서 인코딩을 쿼리 할 수 ​​있습니다. 그 후 당신은 말할 수 :

새로운 String (message.getBytes (currentEncoding), "UTF8");

나는 세 번째 것을 선호합니다.