Rest Jersey web服务非ascii字符
我在新泽西州休息。我使用Jersey 1.17 API编写了一个简单的RESTful Web服务。Web服务通过POST方法接受数据。当我传递包含非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) {
@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并查询编码。然后你可以说:
在您的情况下,我更喜欢第三个。我不认为Jersey关心@Consumes定义的字符集。我猜Jersey只是使用request.getParameter方法,该方法使用请求的编码来解析参数 您有许多选项可以设置编码:
- 如果servlet容器支持,请设置连接器的默认编码
- 将jvm的默认编码设置为UTF8
- 创建一个Servlet过滤器,用于捕获此调用和调用请求;在这种情况下,必须确保在调用任何其他getter函数(如getParameter)之前调用setCharacterEncoding,因为字符编码是在请求的第一次get调用期间设置的
- 手动对参数值进行变换。您可以获取ServletRequest并查询编码。然后你可以说: