是否可以序列化JSON响应,同时基于If条件排除一些元素?
if(a == 1) { //show element } else { //don't show element }
我试过使用@JSONIgnore,但它只是忽略了元素而不管条件如何。我是这个领域的新手。有什么想法吗?编辑:我正在开发企业软件,所以使用第三方库等将是不可能的。
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; }
jhiyze9q2#
我知道你的问题是关于@JsonIgnore的,但你可能想试试@JsonInclude:
@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; } }
t3psigkw3#
我为自己的需求找到的最直接的解决方案是使用
@JsonInclude(JsonInclude.Include.NON_NULL)
基本上,如果你可以有条件地将一个值设置为null,那么你就可以使用上面的注解将它完全从序列化中排除。
@JsonInclude(JsonInclude.Include.NON_NULL) public String getValueToConditionallyExclude() { if (conditionWhereIWantToExcludethisField) { return null; } return theRealValueWhichWillNeverOtherwiseBeNull; }
3条答案
按热度按时间83qze16e1#
您可以使用自定义Jackson序列化程序。
然后在对象中使用自定义序列化程序。
jhiyze9q2#
我知道你的问题是关于
@JsonIgnore
的,但你可能想试试@JsonInclude
:t3psigkw3#
我为自己的需求找到的最直接的解决方案是使用
基本上,如果你可以有条件地将一个值设置为null,那么你就可以使用上面的注解将它完全从序列化中排除。