Rest Jersey web服务非ascii字符

Rest Jersey web服务非ascii字符,rest,jersey,Rest,Jersey,我在新泽西州休息。我使用Jersey 1.17 API编写了一个简单的RESTful Web服务。Web服务通过POST方法接受数据。当我传递包含非ascii字符的数据时,它无法正确读取它们 @POST @Path("hello") @Consumes(MediaType.APPLICATION_FORM_URLENCODED + ";charset=UTF-8") public Response hello(@FormParam("message") String message) {

我在新泽西州休息。我使用Jersey 1.17 API编写了一个简单的RESTful Web服务。Web服务通过POST方法接受数据。当我传递包含非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();      
}
curl --data "message=A função, Ãugent" http://localhost:8080/search/hello/
当我传递参数“message”中包含非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();      
}
curl --data "message=A função, Ãugent" http://localhost:8080/search/hello/

POST方法打印“一个有趣的”我不认为Jersey关心@Consumes定义的字符集。我猜Jersey只是使用request.getParameter方法,该方法使用请求的编码来解析参数

您有许多选项可以设置编码:

  • 如果servlet容器支持,请设置连接器的默认编码
  • 将jvm的默认编码设置为UTF8
  • 创建一个Servlet过滤器,用于捕获此调用和调用请求;在这种情况下,必须确保在调用任何其他getter函数(如getParameter)之前调用setCharacterEncoding,因为字符编码是在请求的第一次get调用期间设置的
  • 手动对参数值进行变换。您可以获取ServletRequest并查询编码。然后你可以说:
新字符串(message.getBytes(currentEncoding),“UTF8”)


在您的情况下,我更喜欢第三个。

我不认为Jersey关心@Consumes定义的字符集。我猜Jersey只是使用request.getParameter方法,该方法使用请求的编码来解析参数

您有许多选项可以设置编码:

  • 如果servlet容器支持,请设置连接器的默认编码
  • 将jvm的默认编码设置为UTF8
  • 创建一个Servlet过滤器,用于捕获此调用和调用请求;在这种情况下,必须确保在调用任何其他getter函数(如getParameter)之前调用setCharacterEncoding,因为字符编码是在请求的第一次get调用期间设置的
  • 手动对参数值进行变换。您可以获取ServletRequest并查询编码。然后你可以说:
新字符串(message.getBytes(currentEncoding),“UTF8”)

就你的情况而言,我更喜欢第三个