使用带有JAXB注释的Jackson JSON库

时间:2011-01-19 17:50:03

标签: jaxb jackson

我正在尝试在基于RESTEasy的Web应用程序中启用JAXB注释支持,并且向我建议了这篇文章(http://wiki.fasterxml.com/JacksonJAXBAnnotations)。我能够得到jackson-xc.jar,但是我没有看到如何注册注释内部跟踪器。目前,RESTEasy会自动序列化我的JSON响应,以下哪个适合?目前,RESTeasy自动序列化JSON对象。

包含jackson-xc jar,其中包含org.codehaus.jackson.xc.JaxbAnnotationIntrospector 注册此注释introspector

    ObjectMapper mapper = new ObjectMapper();
    AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
    // make deserializer use JAXB annotations (only)
    mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
    // make serializer use JAXB annotations (only)
    mapper.getSerializationConfig().setAnnotationIntrospector(introspector);

2 个答案:

答案 0 :(得分:2)

您需要弄清楚如何使RESTeasy使用您已配置的ObjectMapper。 JAX-RS提供了通过提供程序执行此操作的通用方法,但使用RESTeasy可能有更简单的方法。 默认情况下,一些JAX-RS实现还注册JAXB注释introspector。

最后一件事:您确定需要使用JAXB注释吗?虽然杰克逊可以使用它们,但最好的方法是在需要覆盖的情况下,只使用基本命名约定进行发现,使用杰克逊自己的注释。 JAXB的问题在于它是特定于xml的,因此与JSON一起使用时几乎没有阻抗。

答案 1 :(得分:1)

感谢您的回复,我会看看您的建议......

我们想要坚持使用jaxb注释的原因是@XmlRootElement(name =“userResponse”)注释允许我们在JSON响应中使用额外的包装元素。见下面的例子:

我们希望{“响应”:{“ userResponse ”:[{“user”:{“businessRegion”:“US”,“firstName”:“joe”,“language” :“en”,“lastName”:“smith”}}}}}}而不是Jackson目前输出的内容,{“response”:[{“user”:{“businessRegion”:“US”,“firstName”:“joe ”, “语言”: “恩”, “姓氏”: “史密斯”}}]}。有没有在没有添加额外包装类的情况下模仿Jackson中的@XmlRootElement?

用户类: @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(名称= “userResponse”) 公共类UserResponse扩展AbstractResponse {     私人用户;