杰克逊与 jaxb

发布于 2024-11-07 01:42:10 字数 253 浏览 3 评论 0原文

在 Jersey 中使用 Jackson JSON 处理器时,何时以及为何需要在其间使用 JAXB 注释? Object->JAXB->JSON

Jackson 还提供了自己的 JAX-RS 提供程序来直接访问 Object->JSON。这种方法缺少什么?或者为什么我更喜欢另一个

ps:我也使用 spring

when using Jackson JSON processor in Jersey, when and why would I need to use JAXB annotations in between? Object->JAXB->JSON

Jackson also provides it's own JAX-RS provider to go direct Object->JSON. what is missing in this approach? or why would I prefer on over another

ps: I use also spring

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鼻尖触碰 2024-11-14 01:42:10

要生成 JSON,您通常只需指定 @Produces(MediaType.APPLICATION_JSON)。不过,默认情况下这将采用 JAXB 路由。

与对象 -> JAXB-> JSON,您必须使用 @XmlRootElement 注释要映射的类。这可以正常工作,但是一旦您开始序列化 HashMap,您将不会得到明显的 {keyOne:"one",keyTwo:"two"} ,而是一些奇怪的东西,比如 {entry:[{key:"keyOne",value:"one"},{key:"keyTwo",value:"two"}]}

所以要直接取Object -> JSON 方式,只需在 web.xml 中指定以下内容:

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>

使用此 JSON 映射将按照您期望的方式工作。只是不要忘记删除 @XmlRootElement 注释,它们在打开 POJO 映射时强制生成 XML。

另请查看我的问题:Java。 util.Map 到 JSON 对象与 Jersey / JAXB / Jackson

参考:http://jersey.java.net/nonav/documentation/latest/json.html#d4e894

For generating JSON you generally just have to specifiy @Produces(MediaType.APPLICATION_JSON). This will however take the JAXB route by default.

With Object -> JAXB -> JSON you will have to annotate the classes you want to map with @XmlRootElement. This will work fine, but once you get to serializing a HashMap you will not end up with an obvious {keyOne:"one",keyTwo:"two"} but rather something strange like {entry:[{key:"keyOne",value:"one"},{key:"keyTwo",value:"two"}]}.

So to take the direct Object -> JSON way, just specify the following in your web.xml:

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>

With this JSON mapping will work just the way you would expect it to work. Just don't forget to remove the @XmlRootElement annotations, they force XML generation when POJO mapping is turned on.

Also have a look at my question regarding this: Java.util.Map to JSON Object with Jersey / JAXB / Jackson

Reference: http://jersey.java.net/nonav/documentation/latest/json.html#d4e894

谎言月老 2024-11-14 01:42:10

如果您还想以 XML 形式生成/使用数据,则只需使用 JAXB 注释。

如果您只关心 JSON,请不要使用 JAXB 注释;除了杰克逊注释之外,他们没有提供任何东西。事实上,大多数情况下,通过使用 Java Bean 命名约定,无需任何注释即可处理基本情况。

You only need to use JAXB annotations if you also want to produce/consume data as XML.

If you just care about JSON, do not use JAXB annotations; there is nothing they offer over and beyond Jackson annotations. And in fact most of the time basic cases can be handled without any annotations by using Java Bean naming conventions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文