如何跳过杰克逊中特定值的特定字段的序列化?

时间:2019-06-11 17:59:43

标签: java jackson

所以我有

class Foo {
  double bar = -30000.0
  double baz = 200
}

-30000.0

实际上不是有效值,它是硬件发出的默认值,实际上这应该是一个空值。我不想序列化此值,相反,如果它是此值,我想完全省略键(如果我设置跳过空值,则采用相同的方式)。问题是,baz也可以是-30000.0,但是在那里有效。实际上,取决于字段/值的条件逻辑更多,但这是最简单的示例。

我觉得我想写这个

class Foo {
   @Skip30k
   double bar = -30000.0
   double baz = -30000.0
}

此输出应为

"{"baz":-30000.0}"

我已经读过baeldung's post和其他内容,但似乎我的选项是在自定义类型(这是原始类型)或全局类型上。如何实现此自定义序列化?

1 个答案:

答案 0 :(得分:2)

您可能想尝试@JsonInclude

@JsonInclude(value = JsonInclude.Include.CUSTOM, 
             valueFilter = Skip30kFilter.class)
private double bar;
public class Skip30kFilter {

    @Override
    public boolean equals(Object other) {

        double value = (Double) other;
        return value > -30000.0;
    }
}

您还可以考虑使用自定义注释和序列化程序,如本answer中所述。