我正在为现有的Java应用程序开发一些REST Web服务。 我正在使用JBoss的Resteasy JAX-RS(因为现有的应用程序在JBoss服务器上运行)。
下面的网络服务应该根据ID号返回一个User对象。
@GET
@Path("/getUser")
@Produces(MediaType.APPLICATION_XML)
public User getUser(@QueryParam("userId") int userId) {
return User.load(userId);
}
用户至少包含ID和名称。
public class User {
private int id;
private String name;
}
当JAX-RS生成XML文档时,它无法处理名称中可能出现的特殊字符,例如æøå。
输出XML声称以UTF-8编码,但它仍然无法显示æøå。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<id>18549</id>
<name>Københavner 1</name>
</user>
我试图以这种方式转换为XML的每个对象都无法正确编码'æøå'。
有什么建议吗?搜索网络也没有多大帮助。
更新: 当我在客户端收到XML时,我首先将它作为String处理,然后使用JAXB将其解组为对象。我忘了将String的编码设置为UTF-8。 所以基本上在解组前这样做:
new String(((String) response).getBytes(), "UTF-8");
答案 0 :(得分:0)
您是否尝试过添加字符集:
@GET
@Path("/getUser")
@Produces("application/xml; charset=UTF-8")
public User getUser(@QueryParam("userId") int userId) {
return User.load(userId);
}
更新:
由于它没有帮助设置字符集,您的问题是您正在消耗ISO-8859-1的输出。
我的猜测是你需要unicode字符U + 00F8,或“拉丁小写字母o和笔画”:ø。 UTF-8编码为0xC3B8。在ISO-88591-1中,C3是Ã,B8是¸(cedilla)。
因此,请确保接收输出的应用程序理解UTF-8并正确显示。
答案 1 :(得分:0)
您可以尝试此How to set the charset with JAX-RS?
@Produces("application/xml; charset=UTF-8")