【发布时间】:2012-02-18 08:41:18
【问题描述】:
我正在使用 Jersey 为服务构建 REST API。我希望能够同时接受和返回 JSON 和 XML,并且大多数情况下都能正常工作,但我不喜欢 Jersey 喜欢吐出的 JSON 的默认“映射”风格。
我知道较新的“自然”表示法(来自http://jersey.java.net/nonav/documentation/latest/json.html,我将详细引用它,因为它使默认“映射”表示法的问题显而易见):
在使用映射 JSON 表示法一段时间后,很明显,一个 需要手动配置所有各种东西可能有点 有问题的。为了避免手动工作,一种新的、自然的 JSON 表示法 在泽西岛版本 1.0.2 中引入。使用自然符号,泽西岛 将自动找出单个项目需要如何 已处理,因此您无需进行任何手动操作 配置。 Java 数组和列表映射到 JSON 数组,甚至 对于单元素情况。 Java 数字和布尔值是正确的 映射为 JSON 数字和布尔值,您无需费心 使用 XML 属性,如在 JSON 中,它们保留原始名称
并且想在任何地方使用它,但我无法弄清楚如何使用它。我正在通过 Tomcat 的 XML 配置文件实例化/配置 Jersey——使用我认为与 servlet/servlet-class/init-param 标签的正常舞蹈——但我无法找到关于它是否或如何的文档可以从那里指定 JSONConfiguration 选项。
我还尝试实现我自己的 ContextResolver,它应用我从 Java 代码实例化的 JSONJAXBContext,我可以在其中应用 JSONConfiguration.natural()(这个例子看起来像 this answer)。这有效,但仅适用于我在该代码中明确列出并传递给 JSONJAXBContext 构造函数的类型。这个额外的代码不仅需要编写和维护,而且如果我添加更多数据类会发生变化,而且它不适用于 List 之类的东西。
有没有办法告诉 Jersey 只使用自然表示法而不是映射表示法,始终适用于所有类型?
【问题讨论】: