3

简短的问题:有没有办法根据它在杰克逊中的值选择性地序列化一个字段?有没有办法告诉杰克逊,比如“如果某个整数字段的值为 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。所以如果我序列化这个对象,我只会得到ints 结果,全部设置为 0,这要归功于@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL).

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

为了实现这一点,我总是可以将我的int声明更改为Integer. 然而,我有很多关于整数的数值计算,并且在网上思考了一下,遇到了这样这样的链接,我有点想坚持原始类型。是否存在满足我两个需求的解决方案?

4

2 回答 2

4

考虑JSON 过滤器。我认为您将需要实现自己的实例BeanPropertyFilter

于 2013-10-09T14:34:21.387 回答
2

好的。我所缺少的只是@JsonInclude(Include.NON_DEFAULT)

和一个默认构造函数。

此外,我将 Jackson 依赖项从 codehaus 转移到了fasterxml

于 2013-10-10T06:44:12.947 回答