gpt4 book ai didi

java - 我可以让 Jersey 全局/默认使用自然 JSON 表示法吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:31:08 27 4
gpt4 key购买 nike

我正在使用 Jersey 为服务构建 REST API。我希望能够接受和返回 JSON 和 XML,并且让这大部分工作正常,但我不喜欢 Jersey 喜欢吐出的默认“映射”风格的 JSON。

我知道更新的“自然”表示法(来自 http://jersey.java.net/nonav/documentation/latest/json.html ,我将详细引用它,因为它使默认“映射”表示法的问题变得显而易见):

After using mapped JSON notation for a while, it was apparent, that a need to configure all the various things manually could be a bit problematic. To avoid the manual work, a new, natural, JSON notation was introduced in Jersey version 1.0.2. With natural notation, Jersey will automatically figure out how individual items need to be processed, so that you do not need to do any kind of manual configuration. Java arrays and lists are mapped into JSON arrays, even for single-element cases. Java numbers and booleans are correctly mapped into JSON numbers and booleans, and you do not need to bother with XML attributes, as in JSON, they keep the original names

并想在任何地方使用它,但我一直无法弄清楚如何使用。我正在通过 Tomcat 的 XML 配置文件实例化/配置 Jersey——使用我认为是带有 servlet/servlet-class/init-param 标签的正常舞蹈——但我无法找到关于它是否或如何的文档可以从那里指定 JSONConfiguration 选项。

我也尝试过实现我自己的 ContextResolver,它应用我从 Java 代码实例化的 JSONJAXBContext,我可以在其中应用 JSONConfiguration.natural()(一个例子看起来像 this answer)。这有效,但仅适用于我在该代码中明确列出并传递给 JSONJAXBContext 构造函数的类型。如果我添加更多数据类,这些额外的代码不仅需要编写和维护以及更改,而且它不适用于 List 之类的东西。

有没有办法告诉 Jersey 始终对所有类型使用自然表示法而不是映射表示法?

最佳答案

我从来没有找到我在这里提出的实际问题的答案,而是找到了一个简单的 3 步过程,它可以实现我想要的相同最终结果:

Jersey 文档突出地提到了这个 POJOMappingFeature/FEATURE_POJO_MAPPING(这是我在问题中链接的文档页面中的第一个示例),但没有准确描述它的含义,从文档呈现信息的方式来看,我认为这是选项(5.1,“POJO 支持”)与选项 5.2(“基于 JAXB 的 JSON 支持”)不一致,这听起来更像我想要的。因此,在尝试启用 FEATURE_POJO_MAPPING 之前,我尝试了很多其他操作。

但是一旦我尝试了它,它就如我所愿地工作了,我再也不用回头看了。

这样做的一个附带好处是,与 Jersey 的原生 JSON 处理实现相比,Jackson 在客户端传递虚假 JSON 内容的情况下生成更好的错误消息。

关于java - 我可以让 Jersey 全局/默认使用自然 JSON 表示法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8998053/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com