@XMLValue和@JsonValue之间有什么区别?

时间:2014-10-28 17:14:16

标签: java java-ee jaxb jackson java-ee-6

@JsonValue javadoc声明:"标记注释类似于javax.xml.bind.annotation.XmlValue"。为什么它相似,有什么区别?

我问这是JAXB中的新手,因为javadoc太神秘了所以我无法找到两者的真实意图,为什么@JsonValue在Java EE规范中不可用,因为它使我们能够将对象正确序列化为字符串(有关上下文,请参阅here

1 个答案:

答案 0 :(得分:2)

@JsonValue是Jackson注释(Jackson是一个开源的JSON绑定库),@XmlValue是一个JAXB(JSR-222)注释。

  

@JsonValue javadoc声明:“Marker注释类似于   javax.xml.bind.annotation.XmlValue“。为什么它类似,是什么   差异?

我认为杰克逊的行为方面没有任何差异。

  

我找不到两者的真实意图

杰克逊除了支持JAXB注释之外,还有至少几个原因:

  1. JAXB注释包含在Java SE 6及更高版本中,因此如果您使用它们,则不会将Jackson库的任何编译时依赖性引入您的域模型。
  2. 您可能将相同的Java模型映射到XML和JSON,因此您可以使用两个JAXB注释在类上仅使用一组元数据。
  3. 有些人正在使用JAXB和Jettison或StAXON来读/写JSON。由于这些模型已经被JAXB注释,杰克逊支持这些注释使得更容易将这些用户转换为杰克逊。
  4.   

    为什么@JsonValue在Java EE规范中不可用

    JAXB是Java EE的一部分,而杰克逊则不是。 JSON-Binding JSR(JSR-367)将成为Java EE 8的一部分(希望Jackson能够参与并实施)。


    更新

      

    “我不认为杰克逊方面存在任何分歧   行为。“。在我上面发布的链接中存在差异,因为   如果我在toString()方法中使用@JsonValue它用于序列化   class as string,但是如果我在同一个方法中使用@XmlValue则没有   发生。见这里

    如果杰克逊在@JsonValue方法支持toString(),但@XmlValue支持@XmlValue,则至少有一个区别。在JAXB中将toString()放在{{1}}方法上是无效的,所以这可能是杰克逊不支持它的原因。

    注意:

    要在Jackson中使用任何JAXB注释,您需要启用此功能: