我有一个这样的对象:
public class MyObject {
private String name;
private int number;
// ...
}
而且我只想在值不为负时包含
number
(number >= 0
)。在研究过程中,我发现了Jackson serialization: ignore empty values (or null)和Jackson serialization: Ignore uninitialised int。二者都使用
@JsonInclude
,Include.NON_NULL
或Include.NON_EMPTY
的Include.NON_DEFAULT
批注,但是它们都不适合我的问题。我可以在我的条件
@JsonInclude
中以某种方式使用number >= 0
来仅在不为负的情况下包括该值吗?还是有另一种解决方案可以实现? 最佳答案
如果您使用Jackson 2.9+版本,则可以尝试使用Include.Custom
的@JsonInclude
值。
从the JsonInclude.CUSTOM
specification:
指示单独的filter
对象的值(由
值本身的JsonInclude.valueFilter()
和/或
JsonInclude.contentFilter()
用于结构化类型的内容)
用于确定纳入标准。过滤对象的equals()
用值调用方法进行序列化;如果返回true,则值为
排除了(即过滤掉);如果false值为,则包括。
与定义自定义序列化程序相比,这是一种更具体和声明性的方法。
@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
和基元一起使用,并将基元包装到filter.equals()
方法中的包装器中。