【问题标题】:@XmlJavaTypeAdapter vs. @JsonSerialize [using restEasy/Jersey/Jackson/Mule]@XmlJavaTypeAdapter 与 @JsonSerialize [使用 restEasy/Jersey/Jackson/Mule]
【发布时间】:2011-10-21 09:09:53
【问题描述】:

我对所有 JAXB/JAX-RS 东西都不熟悉。在工作中,我们使用 Mule ESB 及其 Jersey/Jackson 模块来接受传入的 REST 请求。在客户端,我们使用的是 RestEasy(与 Jackson)...请求应该是 Json,而不是 XML。

它适用于仅包含字符串字段的简单对象。但是一旦我们开始使用更“复杂”的类型,例如 LocalesenumsMaps,就会出现问题。

如果我理解正确的话,JAXB 中没有内置的序列化器用于 Map 之类的类型(我什至应该说“HashMap”,因为如果我理解正确,JAXB 不能很好地支持接口)。所以你必须为这些字段提供你自己的序列化器。

根据我在网络上的搜索,我发现 @XmlJavaTypeAdapter 注释可用于管理您自己的“Map”等类型的序列化。但我也看到,在 Jackson 文档中,可以使用 @JsonSerialize(using=MySerializer.class) 注释。

我们应该使用什么,为什么? @XmlJavaTypeAdapter 还是 @JsonSerialize?它们是相同的还是目的不同?

【问题讨论】:

    标签: jaxb jax-rs jackson resteasy mule


    【解决方案1】:

    首先:Jackson 完全支持所有 JDK 结构化类型,包括 Maps,因此通常不需要特殊配置或注释。 Jackson 不是 JAXB 实现或受 JAXB 限制(基于 POJO 和 XML 之间的映射问题,这 比使用 JSON 的要大一些)。

    Jackson 也很好地支持接口;对于序列化,您很少需要任何额外的东西。 对于反序列化,您可能需要也可能不需要;并且有多种方式来表示具体的实现;但您通常不需要定义自定义序列化程序或反序列化程序。

    所以答案可能是你也不需要。

    现在:JAXB 支持是 Jackson 的一个可选兼容性,主要用于支持 JAXB 是或曾经用于 XML 的遗留事物。如果您不从 JAXB 注释开始,杰克逊自己的注释是首选机制。 因此,除非您需要将 JAXB 注释用于其他目的(读取/写入 XML),否则如果确实需要基于注释的配置,我建议您只使用 Jackson 的 @JsonSerialize。

    【讨论】:

    • 我还有 200 万个关于该主题的其他问题,但您的回复回答了这个特定问题。谢谢!
    • :) 随时查看 [jackson-users.ning.com] 或邮件列表,以及 Jackson Wiki [wiki.fasterxml.com/JacksonHome]。那里有很多信息,即使有点杂乱无章。
    猜你喜欢
    • 2014-01-01
    • 2013-05-28
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多