【发布时间】:2020-06-23 19:59:18
【问题描述】:
几乎相同的question,但接受的答案不符合一般需求。具有简单的类和自定义序列化器,例如:
示例类
@Getter
@Setter
public class ExampleClass {
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonSerialize(using = StringSerializer.class)
private String stringNull;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonSerialize(using = StringSerializer.class)
private String stringOk = "ok";
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonSerialize(converter = StringSerializer.class)
private String stringNotOk = "notOk";
}
自定义序列化程序
@SuppressWarnings("serial")
public static class StringSerializer extends StdSerializer<String> {
public StringSerializer() {
super(String.class);
}
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers)
throws IOException {
if(value != null && value.equals("ok")) {
gen.writeString(value);
}
}
}
所以我只想打印出等于“ok”的元素,但如果不等于“ok”,我不想打印任何东西。除了stringNotOk 之外工作正常。像这样调用 ObjectMappper 时:
new ObjectMapper().writeValueAsString(new ExampleClass());
它会产生“坏”的 JSON:
{"stringOk":"ok","stringNotOk"}
有没有其他方法或者我可以避免将序列化程序提升到类级别并为每个具有此类字段的类单独创建它 na 考虑字段名称等...?
我可以 - 例如 - 以某种方式“恢复”并从已经编写的 JSON 中删除名称“stringNotOk”吗?
如何以一种通用的方式实现这一点,以便只使用一个序列化程序和所需字段的注释?
【问题讨论】:
标签: java serialization jackson