杰克逊 - 拒绝空值,但允许缺少值

时间:2015-07-16 09:18:24

标签: java json jackson

我将JSON反序列化为杰克逊的模型。说我有以下型号:

class Model {
    private String           fieldA;
    private Optional<String> fieldB;
}

此处,fieldA不可为空。在JSON中,它可以不存在或填写:

{

}

{
    "fieldA": "value"
}

在Java中,未填充的in-case会导致成员fieldA的空值。

我的问题:有没有办法拒绝fieldA的空值?对于以下输入JSON,杰克逊应该抛出异常:

{
    "fieldA": null
}

请注意,我只希望fieldA而不是fieldB的行为,因为fieldB可以为空(因此它在模型中包裹Optional

我也可以在fieldA中包装Optional并在那里添加一些bean验证,但我宁愿不更改模型。

1 个答案:

答案 0 :(得分:1)

No Jackson不提供验证API。您可以通过在类中包含@JsonInclude(Include.NON_NULL)来忽略空值,或者使用Bean Validation API,如果不满足条件,它将验证并抛出错误。

<强>更新

对于你的评论答案,无论如何你只想跳过fieldA值,如果它是null并让其他人允许它们而不是setter方法你可以手动检查。

在你的情况下:

public void setFieldA(String fieldA) {

    if (fieldA != null) {
        this.fieldA = fieldA;
    }
}