java - 除了 @Produces 注释之外,Jersey (JAX-RS) 如何知道将 POJO 视为特定的 MIME 类型?

标签 java rest jersey jax-rs

我看到很多 Jersey 的例子看起来像这样:

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 header 值中的媒体类型与 @Produces 注释中的媒体类型进行比较,并选择最合适的一种。假设在您的示例中是 text/xml。

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

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

一月

关于java - 除了 @Produces 注释之外,Jersey (JAX-RS) 如何知道将 POJO 视为特定的 MIME 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2744972/

相关文章:

java - 如何从 Java 进行 Amazon AWS API 调用?

java - Jersey MOXy 不解析 Snake_case

java - Grizzly REST - POST 始终为 404

java - 使用 Table 标签为 gmail 和 yahoo 设计模板?

java - 生成 testng-result.xml 文件时在 TestNG 中执行任务

rest - 使用 Nightwatch.js 实现 REST API 测试的最佳方式

jquery - 当 POST 方法失败时,如何修复 Jquery 上的 cors origin 错误?

java - Jersey Server-Sent Events - 写入断开的连接不会抛出异常

javassist 在 pre-main 方法中加载一个类文件(java instrumentation)

java - 尝试让 JPA/Hibernate 与 REST 配合使用 - TransactionRequiredException : No Transaction is in progress error