我有一个像这样的对象:
running
并且我只想在值不为负(listening
)时包含public class MyObject {
private String name;
private int number;
// ...
}
。
在进行研究时,我发现了Jackson serialization: ignore empty values (or null)和Jackson serialization: Ignore uninitialised int。两者都使用带有number
,number >= 0
或@JsonInclude
的{{1}}批注,但是它们都不适合我的问题。
我可以在条件Include.NON_NULL
中以某种方式使用Include.NON_EMPTY
来仅在不为负的情况下包括该值吗?还是有另一种解决方案可以实现呢?
答案 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
方法中将基元包装到包装器中。