【发布时间】:2015-05-08 23:31:33
【问题描述】:
我正在使用 Jackson 为 RESTful API 序列化和反序列化数据。我想要一个 REST 资源 (/comments),它允许发布 cmets 以及获取 cmets 列表。
这是发布到 /comments 的(简化的)示例。
{"text":"Text","author":"Paul","email":"paul@example.org"}
GET /comments 的结果如下所示:
[{"text":"Text","author":"Paul","emailHash":"76w0kjKP9HpsdhBjx895Sg=="}]
由于电子邮件地址不应该对任何人可见,因此我决定在回复中仅返回电子邮件地址的 MD5 哈希值。
我创建了一个简单的 POJO 类 Comment,其中包含用于 text、author、email 和 emailHash 的 getter 和 setter 字段。
现在,当我序列化结果时,我得到如下:
[{"text":"Text","author":"Paul","email":null,"emailHash":"76w0kjKP9HpsdhBjx895Sg=="}]
但我真的不喜欢 email 在此处返回为 null。根本不应该包含它。
在该字段上使用注释 @JsonIgnore 也会在反序列化时忽略它。我是否必须创建两个类,例如 CreationComment 和 ResultComment 以及共享公共字段的超类 Comment,还是有办法避免创建额外的类?
【问题讨论】:
-
只是忽略空值是一种选择吗?
-
@chrylis 你的意思是,就像忽略返回的 JSON 中的所有空值?不,很遗憾没有。 "emailHash" 也可以为 null,应按原样返回。
标签: java json serialization jackson