杰克逊与jaxb

时间:2011-05-14 12:28:19

标签: java jaxb jax-ws jersey jackson

在泽西岛使用杰克逊JSON处理器时,何时以及为何需要在其间使用JAXB注释? Object->JAXB->JSON

杰克逊还提供自己的JAX-RS提供商直接Object->JSON。这种方法缺少什么?或者为什么我更喜欢另一个

ps:我也用春天

2 个答案:

答案 0 :(得分:10)

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

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

所以采取直接对象 - > 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 to JSON Object with Jersey / JAXB / Jackson

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

答案 1 :(得分:2)

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

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