Jackson序列化忽略负值

时间:2019-06-07 11:37:26

标签: java json serialization jackson

我有一个像这样的对象:

running

并且我只想在值不为负(listening)时包含public class MyObject { private String name; private int number; // ... }

在进行研究时,我发现了Jackson serialization: ignore empty values (or null)Jackson serialization: Ignore uninitialised int。两者都使用带有numbernumber >= 0@JsonInclude的{​​{1}}批注,但是它们都不适合我的问题。

我可以在条件Include.NON_NULL中以某种方式使用Include.NON_EMPTY来仅在不为负的情况下包括该值吗?还是有另一种解决方案可以实现呢?

1 个答案:

答案 0 :(得分:3)

如果您使用Jackson 2.9+版本,则可以尝试使用Include.Custom的{​​{1}}值。
来自the JsonInclude.CUSTOM specification

  

该值指示单独的@JsonInclude对象(由   filter代表价值本身,和/或   JsonInclude.valueFilter()用于结构化类型的内容)   用于确定纳入标准。过滤对象的equals()   用值调用方法进行序列化;如果返回true,则值为   已排除(即已过滤掉);如果包含为假值。

与定义自定义序列化程序相比,这是一种更加具体和声明性的方法。

JsonInclude.contentFilter()

它与@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = PositiveIntegerFilter.class) private int number; // ... public class PositiveIntegerFilter { @Override public boolean equals(Object other) { // Trick required to be compliant with the Jackson Custom attribute processing if (other == null) { return true; } int value = (Integer)other; return value < 0; } } 和基元一起使用,并在objects方法中将基元包装到包装器中。