java - 如何在 jackson 中跳过特定值的特定字段的序列化?

标签 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和其他东西,但我的选项似乎是自定义类型(这是原始类型)或全局类型。我怎样才能实现这个自定义序列化?

最佳答案

您可能想尝试@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中所述。 .

关于java - 如何在 jackson 中跳过特定值的特定字段的序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56549369/

相关文章:

java - 区分对 Java Spring 后端的 Web 和 native 应用程序请求

java - 是否有解决方案可以通过方法引用使方法调用函数具有动态数量的参数?

java - Jframe setDefaultCloseOperation 不起作用

java - 如何使用 fastxml jackson 忽略我没有的对象

java - LocalDateTime 未序列化为时间戳

java - 如何使用新方法在函数内传递变量

java - iText - 创建 PDF 时旋转页面内容

java - 如何在 Jackson 的 ObjectMapper 上添加 Jdk8Module

java - 使用 Jackson 反序列化自引用对象

java - jongo/jackson 在 java 中反序列化 scala.option