@JsonIgnore带条件

b5lpy0ml  于 2023-04-08  发布在  其他
关注(0)|答案(3)|浏览(194)

是否可以序列化JSON响应,同时基于If条件排除一些元素?

if(a == 1) {
   //show element
} else {
   //don't show element
}

我试过使用@JSONIgnore,但它只是忽略了元素而不管条件如何。我是这个领域的新手。有什么想法吗?
编辑:我正在开发企业软件,所以使用第三方库等将是不可能的。

83qze16e

83qze16e1#

您可以使用自定义Jackson序列化程序。

public class ConditionalValueSerializer extends StdSerializer<Integer> {
    public ConditionalValueSerializer() {
        this(null);
    }

    public ConditionalValueSerializer(Class<Integer> t) {
        super(t);
    }

    @Override
    public void serialize(Integer a, JsonGenerator gen, SerializerProvider provider) throws IOException {
        if(a == 5 ){
            gen.writeString(a.toString());
        } else {
            gen.writeString("");
        }

    }
}

然后在对象中使用自定义序列化程序。

public class SomeThing {
    public String name;

    @JsonSerialize(using = ConditionalValueSerializer.class)
    public Integer value;
}
jhiyze9q

jhiyze9q2#

我知道你的问题是关于@JsonIgnore的,但你可能想试试@JsonInclude

@JsonInclude(value = JsonInclude.Include.CUSTOM, 
             valueFilter = CustomValueFilter.class)
private Integer value;
public class CustomValueFilter {

    @Override
    public boolean equals(Object other) {

        Integer a = (Integer) other;
        return a == 1;
    }
}
t3psigkw

t3psigkw3#

我为自己的需求找到的最直接的解决方案是使用

@JsonInclude(JsonInclude.Include.NON_NULL)

基本上,如果你可以有条件地将一个值设置为null,那么你就可以使用上面的注解将它完全从序列化中排除。

@JsonInclude(JsonInclude.Include.NON_NULL)
public String getValueToConditionallyExclude() {
    if (conditionWhereIWantToExcludethisField) {
        return null;
    }
    return theRealValueWhichWillNeverOtherwiseBeNull;
}

相关问题