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

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

@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 不支持它的原因。

注意:

要将任何 JAXB 注释与 Jackson 一起使用,您需要启用此功能:

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

相关文章:

java - 如果 Java 中存在用户定义的构造函数,则初始化变量

java - 获取托管特定网站的服务器位置

java - Vaadin:将值从主页传递到窗口页面

java - Payara 5 上的 Spring-Boot Rest Controller 忽略 JAXB 注释

java - JAXB eclipse 错误 : There's no JAXB 2. 2 API 在类路径中

java - 2 最优求解TSP的opt算法

java - 如何/将字符串列表从 jsf 传递到支持 bean 的最佳方法是什么

java - 将 J2EE 网站中发生的错误(异常)映射到合适的错误消息的有效方法是什么?

java - CXF JSONProvider 编码导致 java.lang.ClassNotFoundException : com. sun.xml.bind.marshaller.NamespacePrefixMapper

java - 在不同的照明下检测车牌