有条件地忽略Jackson的原始类型字段

时间:2013-10-09 14:23:32

标签: java spring spring-mvc jackson

简短问题:有没有办法根据杰克逊的值来选择性地序列化字段?有没有办法告诉杰克逊,比如“如果某个整数字段的值为0,则不要序列化它。”

(如果你理解我的意思,请跳过以下内容)

长问题又名为什么我要做这样的事情: 假设我有一个Spring MVC模型类

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class Foo {
    int a0;
    int a1;
    .
    .
    .
    int a99;
    String c;

    //getters and setters
}

对于Foo的新对象,所有int都会初始化为0,Stringnull。因此,如果我序列化此对象,我只会在结果中获得int,所有设置为0,这要归功于@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

在实际操作中,假设我只回复a1 ... a99的某些,比如a20到a26,设置为一些有意义的值(对我而言,它不是0)。发送那些字段是明智的,对吗?

为实现这一目标,我始终可以将int声明更改为Integer。但是,我有很多关于整数的数值计算,并且稍微思考网络并遇到像thisthis之类的链接,我有点想坚持原始类型。是否存在满足我需求的解决方案?

2 个答案:

答案 0 :(得分:4)

考虑JSON Filters。我认为您需要实现自己的BeanPropertyFilter实例。

答案 1 :(得分:2)

好。我失踪的只有@JsonInclude(Include.NON_DEFAULT)

和默认构造函数。

我还将我的Jackson依赖项从codehaus转移到fasterxml