java - 为什么 JAX-RS 忽略瞬态关键字
问题描述
在以下对象中:
class Foo implements Serializable {
transient String bar;
String baz;
}
JAX-RS 将忽略瞬态关键字并仍然bar
在响应中序列化。在这种情况下,要阻止它被序列化,您需要使用注释(即@XmlTransient
)。这个要求背后的原因是什么?从表面上看。似乎只有关键字就足够了。
在哪些用例中,关键字可能不足/不正确并且需要注释?
解决方案
注释很棒,因为它们是命名空间的,允许多个 API 注释相同的字段而不会互相影响:
@XmlTransient
使其过渡到 JAX-RS。@JsonIgnore
让它对杰克逊来说是短暂的。@Expose
使其在 GSON 中非瞬态。- 您可以使用无、任何或全部。
不幸的是,2004 年 Java 1.5 首次支持注解,而 1997 年 Java 1.1 中添加了序列化。
由于他们没有用户可声明的注释,因此他们添加了transient
关键字。如果它今天发布,它无疑会使用自己的序列化 API 特定注释来代替。
JAX-RS 选择将其transient
视为只是另一个特定于 API 的注释。这是一个很好的调用,因为添加另一个 API 的注释很容易,但如果多个 API 尝试解释彼此的注释,它会变得复杂且容易出错。
推荐阅读
- batch-file - 使用批处理脚本,我们如何在不解压缩的情况下找到压缩/压缩文件的行数?
- swift - 斯威夫特: AVAssetReader.status 是 AVAssetReaderStatus
- linux - 看电影时如何防止swayidle执行
- c# - 如何将文件从 URL 下载到服务器文件夹
- java - java泛型中类型擦除的逻辑是什么?
- amazon-web-services - AWS lex 返回错误无效的 Lambda 响应
- flash - 无法打开 Flash exe 文件
- html - 如何创建从右到左的打字动画
- datatable - 根据媒体查询大小删除或隐藏特定(仅一个)数据表列
- r - 通过条件列表的子集