3

我看到很多关于泽西岛的例子,看起来像这样:

public class ItemResource {

    @GET
    @Path("/items")
    @Produces({"text/xml", "application/json"})
    public List<Item> getItems() {
        List<Item> items = new ArrayList<Item>();

        Item item = new Item();
        item.setItemName("My Item Name!");
        items.add(item);

        return items;
    }
}

但后来我无法剖析 Item,以及 Jersey 如何知道如何将 Item 转换为 XML 或 JSON。我见过非常基本的示例,它们只返回构造的 HTML 或 XML 的字符串,这对我来说更有意义,但我错过了下一步。我查看了样本,其中一个很突出(json-from-jaxb 样本),因为该对象标有以下类型的注释:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "flight"
})
@XmlRootElement(name = "flights")

我正在寻找逐步介绍此“翻译”的教程,或者在此处解释如何将 POJO 翻译为特定 mime 类型的输出。谢谢!

4

1 回答 1

10

这里有两件事在起作用。首先,@Produces 注解中的媒体类型用于内容协商。将客户端发送的 Accept 标头值中的媒体类型与 @Produces 注释中的媒体类型进行比较,并选择最合适的媒体类型。假设在您的示例中是 text/xml 。

Jersey 在内部构建响应体时会尝试找到一个 MessageBodyWriter 可以将 Item 对象转换为 text/xml。通常程序员会提供这些“映射器”类,但对于 XML 和 JSON,Jersey 为了方便已经内置了 MessageBodyReaders。

这就是为什么它看起来好像发生了某种魔法。

于 2010-04-30T18:05:19.793 回答