【问题标题】:Conditionally ignore primitive typed fields with Jackson有条件地忽略杰克逊的原始类型字段
【发布时间】:2013-10-09 14:23:31
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您要选择 Gson 而不是 jackson,那么您可以使用他们的排除策略来做到这一点。参考这里:stackoverflow.com/questions/4802887/…
  • 我有点太远了,无法更改实现,谢谢:)

标签: java spring spring-mvc jackson


【解决方案1】:

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

【讨论】:

  • 当我找到解决我的问题的单行解决方案时,我正在使用 JSON 过滤器(找到它已发布)。
【解决方案2】:

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

还有一个默认构造函数。

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

【讨论】:

  • 不过,正如@Vidya 所建议的,我猜JSON filters 是更灵活的解决方案。
猜你喜欢
  • 2018-05-01
  • 1970-01-01
  • 2015-03-20
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 2016-01-16
  • 1970-01-01
相关资源
最近更新 更多