【发布时间】:2011-08-25 12:01:15
【问题描述】:
在泽西岛使用 Jackson JSON 处理器时,何时以及为什么需要在两者之间使用 JAXB 注释? Object->JAXB->JSON
Jackson 还提供了它自己的 JAX-RS 提供程序以直接访问 Object->JSON。这种方法缺少什么?或者为什么我更喜欢另一个
ps:我也用弹簧
【问题讨论】:
标签: java jaxb jax-ws jersey jackson
在泽西岛使用 Jackson JSON 处理器时,何时以及为什么需要在两者之间使用 JAXB 注释? Object->JAXB->JSON
Jackson 还提供了它自己的 JAX-RS 提供程序以直接访问 Object->JSON。这种方法缺少什么?或者为什么我更喜欢另一个
ps:我也用弹簧
【问题讨论】:
标签: java jaxb jax-ws jersey jackson
要生成 JSON,您通常只需指定 @Produces(MediaType.APPLICATION_JSON)。然而,这将默认采用 JAXB 路由。
使用 Object -> 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 to JSON Object with Jersey / JAXB / Jackson
参考:http://jersey.java.net/nonav/documentation/latest/json.html#d4e894
【讨论】:
如果您还想以 XML 格式生成/使用数据,则只需要使用 JAXB 注释。
如果你只关心 JSON,不要使用 JAXB 注解;除了杰克逊注释之外,他们没有提供任何东西。事实上,大多数情况下,基本情况都可以通过使用 Java Bean 命名约定来处理,而无需任何注释。
【讨论】: