【问题标题】:How to ignore field totally by its value when serializing with Jackson with annotation on that field?使用 Jackson 序列化并在该字段上添加注释时,如何完全忽略字段的值?
【发布时间】: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


    【解决方案1】:

    我认为您正在寻找类似的东西

    @JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = OkFilter.class)

    public class OkFilter {
    
      @Override
      public boolean equals(Object obj) {
         //your logic for finding 'ok' value here
      }
    }
    

    您可以在此处阅读有关此内容的更多信息 https://www.logicbig.com/tutorials/misc/jackson/json-include-customized.html

    【讨论】:

      猜你喜欢
      • 2015-05-31
      • 2018-07-21
      • 2016-06-10
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2020-02-16
      • 2018-05-20
      • 2016-07-26
      相关资源
      最近更新 更多