泽西网页服务JSON UTF-8编码

我使用Jersey 1.11做了一个小型的restwebservice。 当我调用返回Json的url时,非英文字符的字符编码有问题。 Xml的相应URL(“test.xml”使得它在起始xml标签中是utf-8。

如何使url“test.json”返回utf-8编码响应?

以下是该服务的代码:

@Stateless @Path("/") public class RestTest { @EJB private MyDao myDao; @Path("test.xml/") @GET @Produces(MediaType.APPLICATION_XML ) public List<Profile> getProfiles() { return myDao.getProfilesForWeb(); } @Path("test.json/") @GET @Produces(MediaType.APPLICATION_JSON) public List<Profile> getProfilesAsJson() { return myDao.getProfilesForWeb(); } } 

这是服务使用的pojo:

 package se.kc.mimee.profile.model; @XmlRootElement public class Profile { public int id; public String name; public Profile(int id, String name) { this.id = id; this.name = name; } public Profile() {} } 

泽西应该总是默认产生utf-8,听起来像问题是你的客户端没有正确解释它(xml声明不会“使”utf-8,只是告诉客户端如何parsing它)。

你有什么客户看到这些问题?

有效的JSON只能是Unicode(utf-8/16/32); parsing器应该能够自动检测编码(当然,有些不),所以在JSON中没有编码声明。

您可以将其添加到Content-Type如下所示:

 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") 

如果将字符集添加到每个资源不是一个选项,也许这个问题的答案,显示如何执行一个默认的字符集,可能会有所帮助。

responseMessage是我们可以发送UTF-8 charset作为响应的bean类。

 return Response.ok(responseMessage).header("Content-Type", "application/json;charset=UTF-8").build(); 

如果@Produces(MediaType.APPLICATION_JSON +“; charset = utf-8”)不起作用,请尝试:

@Produces( “应用程序/ JSON;字符集= UTF-8”)

理论上它是一样的,但是第一种select对我来说不起作用

你也可以试试这个:

 return Response.ok(responseMessage, "application/json;charset=UTF-8").build();