【发布时间】:2018-06-21 02:40:36
【问题描述】:
假设我有 Description 值对象:
@JsonInclude(value = JsonInclude.Include.ALWAYS)
public class Description {
@Column(name = "DESCRIPTION")
private final String description;
}
和Product实体:
@Entity
public class Product extends AbstractEntity<Long> {
@JsonUnwrapped
private final Description description;
}
我为Description 创建了自定义序列化程序:
static class DescriptionSerializer extends StdSerializer<Description> {
DescriptionSerializer() {
super(Description.class);
}
@Override
public void serialize(Description value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
if (value != null) {
jgen.writeString(value.getDescription());
} else {
jgen.writeNull();
}
}
}
当我创建时:
Product product = new Product(new Description("description"));
并将其序列化:
String result = mapper.writeValueAsString(spec);
它返回 JSON:{"description":"description"}
当我创建时:
Product product = new Product(null);
它返回{},
但我希望{"description":null}
如果我删除@JsonUnwrapped,它会按我的预期工作,但对于非空Description,它会创建嵌套对象
有没有办法以与内置 Java 类型类似的方式对具有空值对象的字段进行解包?
【问题讨论】:
标签: java json jackson spring-data-rest