我看到很多泽西岛的例子,看起来像这样:
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 类型的输出。谢谢!
这里有两件事在起作用。首先,@Produces 注释中的媒体类型用于内容协商。将客户端发送的 Accept 标头值中的媒体类型与 @Produces 注释中的媒体类型进行比较,并选择最合适的一种。假设您的示例中是 text/xml。
当构造响应主体时,Jersey 内部尝试找到一个可以将 Item 对象转换为 text/xml 的 MessageBodyWriter。通常程序员会提供这些“映射器”类,但对于 XML 和 JSON,为了方便起见,Jersey 已经内置了 MessageBodyReaders。
这就是为什么看起来好像发生了某种魔法。
Jan
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)