如何使用Jackson定义可选的JSON字段

33

我有一个带有一个可选字段的对象,并且找不到适当的注释来建模它。任何用Jackson正确处理它的想法吗?


1
所有字段默认情况下都是可选的。您遇到了什么问题? - dnault
3个回答

48
在Jackson中,你无法区分可选字段和非可选字段。只需在你的POJO中声明任何字段。如果你的JSON结构中没有某个字段,则Jackson不会调用setter方法。你可以通过在POJO中使用标志来跟踪是否已调用了setter方法。

8

来晚了...

使用Spring HttpMessageConverter 4.3.6通过Jackson 2.8.6,我不得不将我的setter参数更改为未包装的类型,就像这样:

class Foo {
    private Optional<Bar> bar;

    public void setBar(Bar bar) { // NOT Optional<Bar>, this gives me Optional.empty()
        this.bar = Optional.of(bar);
    }

    // getter doesn't need to be changed
}

1
不同的可选项.. ;D - Marco
我现在明白了 :D - pyb
2
这不是使用 Optional 的正确方式,它应该作为方法返回类型而不是成员字段的类型使用。 - bonapart3

0

我们正在使用Spring Boot 2.7.9和Jackson 2.13.5。

为了使属性在Jackson将输入JSON绑定到我们的DTO时变成可选的,我们在DTO类的顶部使用以下代码:

@JsonIgnoreProperties(ignoreUnknown = true)

如果我们希望在序列化和反序列化时完全忽略某个属性,我们可以在该属性上使用@JsonIgnore注解,这样它就不会出现在我们的JSON中,也不会在从JSON创建对象时出现。
@JsonIgnore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接