首页 文章

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

提问于
浏览
1

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

它适用于仅包含String字段的简单对象 . 但是一旦我们开始使用更多"complex"类型,例如Locales,枚举或 Map ,就会出现问题 .

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

通过我在网络上的搜索,我发现 @XmlJavaTypeAdapter 注释可以用来管理你自己的类型"Map"的序列化 . 但我在Jackson文档中也看到可以使用 @JsonSerialize(using=MySerializer.class) 注释 .

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

1 回答

  • 2

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

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

    所以答案是你不需要的 .

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

相关问题