一尘不染

杰克逊与jaxb

java

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

杰克逊(Jackson)还提供了自己的JAX-RS服务提供商以直接使用Object->JSON。这种方法缺少什么?还是为什么我比其他人更喜欢

ps:我也用弹簧


阅读 204

收藏
2020-12-03

共1个答案

一尘不染

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

使用Object-> JAXB->
JSON,您必须注释要映射的类@XmlRootElement。这可以很好地工作,但是一旦您要序列化a,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。

2020-12-03