在以下对象中:
stash@{n}
JAX-RS将忽略transient关键字并仍然在响应中序列化class Foo implements Serializable {
transient String bar;
String baz;
}
。要在这种情况下阻止它被序列化,您需要使用注释(即bar
)。这个要求背后的原因是什么?从表面上看。似乎关键字应该足够了。
在什么用例中,关键字可能不够/不合适并且需要注释?
答案 0 :(得分:4)
注释很棒,因为它们是命名空间,允许多个API注释相同的字段而不会互相踩到脚趾:
@XmlTransient
使其成为JAX-RS的瞬态。@JsonIgnore
让杰克逊不知所措。@Expose
在GSON中使其成为非瞬态的。不幸的是,2004年Java 1.5中首次支持注释,而1997年在Java 1.1中添加了序列化。
由于他们没有用户声明的注释,因此他们添加了transient
关键字。如果它今天发布,它无疑会使用自己的Serialization API特定注释。
JAX-RS选择将transient
视为仅仅是另一个API特定注释。这是一个很好的调用,因为它很容易添加另一个API的注释,但如果多个API试图解释彼此的注释,它会变得复杂且容易出错。
答案 1 :(得分:0)
这只是框架设计者做出的决定。它以更复杂的代价为实施者提供了更大的灵活性,尽管他们可能有其他理由做出决定。
序列化(其是瞬态的最初目的)可以跳过该字段的灵活性,但该字段仍然可以由JAX-RS填充,反之亦然。此外,它明确区分了这些问题。