@JsonValue
javadoc 声明:“类似于 javax.xml.bind.annotation.XmlValue 的标记注释”。为什么相似,有什么不同?
我作为 JAXB 的新手问这个问题,因为 javadoc 太神秘了,所以我找不到两者的真正意图,以及为什么 @JsonValue 在 Java EE 规范中不可用,因为它使我们能够正确序列化将对象转换为字符串(请参阅 here 了解上下文)
最佳答案
@JsonValue
是 Jackson 注释(Jackson 是一个开源 JSON 绑定(bind)库),@XmlValue
是 JAXB ( JSR-222 ) 注释。
@JsonValue javadoc states: "Marker annotation similar to javax.xml.bind.annotation.XmlValue". Why is it similar and what are the differences?
我不认为 jackson 的行为有任何差异。
I can't find the real intent of both
除了自己的注释之外,Jackson 支持 JAXB 注释至少还有几个原因:
- JAXB 注释包含在 Java SE 6 及更高版本中,因此,如果您使用它们,则不会将 Jackson 库的任何编译时依赖项引入域模型中。
- 您可能将相同的 Java 模型映射到 XML 和 JSON,因此您可以使用这两种模型的 JAXB 注释,只使用类上的一组元数据。
- 有些人将 JAXB 与 Jettison 或 StAXON 结合使用来读取/写入 JSON。由于这些模型已经进行了 JAXB 注释,Jackson 支持这些注释使得将这些用户转换到 Jackson 变得更加容易。
why @JsonValue is not available in the Java EE spec
JAXB 是 Java EE 的一部分,而 Jackson 不是。 JSON-Binding JSR ( JSR-367 ) 将成为 Java EE 8 的一部分(希望 Jackson 能够参与并实现)。
更新
"I don't believe there are any differences in terms of Jackson behaviour.". In the link I posted above there is a difference, because if I use @JsonValue in a toString() method it is used to serialize the class as string, but if I use @XmlValue in the same method nothing happens. See here
好吧,如果 Jackson 在 toString()
方法上支持 @JsonValue
,但不支持 @XmlValue
,那么至少有一个区别。在 JAXB 中将 @XmlValue
放在 toString()
方法上是无效的,因此这可能就是 Jackson 不支持它的原因。
注意:
要将任何 JAXB 注释与 Jackson 一起使用,您需要启用此功能:
关于java - @XMLValue 和 @JsonValue 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26614438/