【问题标题】:use Jackson JSON library with JAXB annotations使用带有 JAXB 注释的 Jackson JSON 库
【发布时间】:2011-01-19 17:50:03
【问题描述】:

我正在尝试在基于 RESTEasy 的 Web 应用程序中启用 JAXB 注释支持,这篇文章是向我推荐的 (http://wiki.fasterxml.com/JacksonJAXBAnnotations)。我能够得到 jackson-xc.jar 但我看不到如何注册注释内省。目前,RESTEasy 会自动序列化我的 JSON 响应,下面适合什么?目前,RESTeasy 自动序列化 JSON 对象。

包含 jackson-xc jar,其中包含 org.codehaus.jackson.xc.JaxbAnnotationIntrospector 注册这个注解内省

    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);

【问题讨论】:

    标签: jaxb jackson


    【解决方案1】:

    你需要弄清楚的是如何让RESTeasy使用你已经配置好的ObjectMapper。 JAX-RS 提供了通过提供程序执行此操作的通用方法,但使用 RESTeasy 可能有更简单的方法来执行此操作。 一些 JAX-RS 实现还默认注册 JAXB 注解内省。

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

    【讨论】:

      【解决方案2】:

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

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

      我们希望有 {"response":{"userResponse":[{"user":{"businessRegion":"US","firstName":"joe","language" :"en","lastName":"smith"}}}]} 而不是 Jackson 当前输出的内容,{"response":[{"user":{"businessRegion":"US","firstName":"joe ","language":"en","lastName":"smith"}}]}。有没有在不添加额外包装类的情况下模仿 Jackson 中的 @XmlRootElement?

      用户等级: @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name="userResponse") 公共类 UserResponse 扩展 AbstractResponse{ 私人用户用户;

      【讨论】:

      • 好的。这种包装然后由 RESTeasy 完成,因为即使使用 JAXB 注释,Jackson 也不会这样做;但有些框架会这样做,例如帮助确定在根级别绑定到哪种类型。对于它的价值,这种包装很容易通过简单的包装类或使用 java.lang.Map 来完成;所以这可能不需要使用@XmlRootElement。但可能还有其他使用它的原因。
      猜你喜欢
      • 1970-01-01
      • 2011-12-20
      • 2014-01-08
      • 1970-01-01
      • 2021-06-29
      • 2012-02-25
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多