JAX-RS处理XML解析中的特殊字符

时间:2015-04-17 13:44:02

标签: java xml web-services rest

我正在为现有的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");

2 个答案:

答案 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")