首页 > 解决方案 > 为什么 JAX-RS 忽略瞬态关键字

问题描述

在以下对象中:

class Foo implements Serializable {
    transient String bar;
    String baz;
}

JAX-RS 将忽略瞬态关键字并仍然bar在响应中序列化。在这种情况下,要阻止它被序列化,您需要使用注释(即@XmlTransient)。这个要求背后的原因是什么?从表面上看。似乎只有关键字就足够了。

在哪些用例中,关键字可能不足/不正确并且需要注释?

标签: javajax-rstransient

解决方案


注释很棒,因为它们是命名空间的,允许多个 API 注释相同的字段而不会互相影响:

  • @XmlTransient使其过渡到 JAX-RS。
  • @JsonIgnore让它对杰克逊来说是短暂的。
  • @Expose使其在 GSON 中非瞬态。
  • 您可以使用无、任何或全部。

不幸的是,2004 年 Java 1.5 首次支持注解,而 1997 年 Java 1.1 中添加了序列化。

由于他们没有用户可声明的注释,因此他们添加了transient关键字。如果它今天发布,它无疑会使用自己的序列化 API 特定注释来代替。

JAX-RS 选择将其transient视为只是另一个特定于 API 的注释。这是一个很好的调用,因为添加另一个 API 的注释很容易,但如果多个 API 尝试解释彼此的注释,它会变得复杂且容易出错。


推荐阅读