gpt4 book ai didi

java - @XMLValue 和@JsonValue 有什么区别

转载 作者:行者123 更新时间:2023-11-30 09:00:50 26 4
gpt4 key购买 nike

@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 注释:

  1. JAXB 注释包含在 Java SE 6 及更高版本中,因此如果您使用它们,则不会将对 Jackson 库的任何编译时依赖项引入您的域模型。
  2. 您可能将相同的 Java 模型映射到 XML 和 JSON,因此您可以使用 JAXB 注释在您的类上仅使用一组元数据。
  3. 有些人使用 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 在那里不支持它的原因。

注意:

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

关于java - @XMLValue 和@JsonValue 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26614438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com