我用Jersey 1.11做了一个小的Rest网络服务。当我调用返回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() {}
}发布于 2012-02-20 18:55:02
Jersey在默认情况下应该总是生成utf-8,听起来问题似乎是你的客户端没有正确地解释它( xml声明并没有“使”它成为utf-8,只是告诉客户端如何解析它)。
您在哪个客户端上看到了这些问题?
有效的JSON只应该是Unicode (utf-8/16/32);解析器应该能够自动检测编码(当然,有些解析器不能),所以JSON中没有编码声明。
您可以将其添加到Content-Type中,如下所示:
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")发布于 2016-05-19 13:27:29
如果@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")不起作用,请尝试:
@Produces("application/json;charset=utf-8")
理论上是一样的,但第一个选项对我不起作用。
发布于 2013-12-13 23:11:10
如果不能将字符集添加到每个资源中,那么this question的答案可能会有所帮助,它展示了如何强制使用默认字符集。
https://stackoverflow.com/questions/9359728
复制相似问题