@XmlJavaTypeAdapter vs. @JsonSerialize [使用restEasy / Jersey / Jackson / Mule]

时间:2011-10-21 09:09:53

标签: jaxb jax-rs jackson resteasy mule

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

它适用于仅包含String字段的简单对象。但是,只要我们开始使用更多“复杂”类型,例如区域设置枚举地图,就会出现问题。

如果我理解正确,JAXB中没有像Map这样的类型的内置序列化器(我甚至应该说“HashMap”,因为如果我理解正确,JAXB不能很好地支持接口)。因此,您必须为这些字段提供自己的序列化程序。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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