使用 Jackson 进行映射时将默认值设置为空字段

2022-08-31 10:10:36

我正在尝试使用Jackson将一些JSON对象映射到Java对象。JSON对象中的一些字段是必填字段(我可以用)标记,有些是可选的。@NotNull

使用 Jackson 进行映射后,JSON 对象中未设置的所有字段在 Java 中都将具有空值。有没有类似的注释可以告诉 Jackson 为 Java 类成员设置默认值,以防它为 null?@NotNull

编辑:为了使问题更清晰,这里有一些代码示例。

Java 对象:

class JavaObject {
    @NotNull
    public String notNullMember;

    @DefaultValue("Value")
    public String optionalMember;
}

JSON 对象可以是:

{
    "notNullMember" : "notNull"
}

艺术

{
    "notNullMember" : "notNull",
    "optionalMember" : "optional"
}

注释只是为了显示我所要求的内容。这不是一个真正的注释。如果 JSON 对象类似于第一个示例中,我希望 的值是 而不是 .有没有一个注释可以做这样的事情?@DefaultValueoptionalMember"Value"null


答案 1

没有用于设置默认值的批注。
您只能在 java 类级别设置默认值:

public class JavaObject 
{
    public String notNullMember;

    public String optionalMember = "Value";
}

答案 2

只有一个建议的解决方案保留了显式设置的时间(POJO可读性在那里丢失并且很笨拙)default-valuesome-value:null

以下是如何保留和从不将其设置为default-valuenull

@JsonProperty("some-value")
public String someValue = "default-value";

@JsonSetter("some-value")
public void setSomeValue(String s) {
    if (s != null) { 
        someValue = s; 
    }
}