当前位置: 代码迷 >> java >> Jackson-拒绝空值,但允许不存在值
  详细解决方案

Jackson-拒绝空值,但允许不存在值

热度:24   发布时间:2023-07-26 14:30:34.0

我正在用Jackson将一个JSON反序列化为模型。 说我有以下模型:

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

在这里, fieldA是不可为空的。 在JSON中,它可以不存在或填写:

{

}

要么

{
    "fieldA": "value"
}

在Java中,未填充的情况导致成员fieldA值为空。

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

{
    "fieldA": null
}

请注意,我只希望fieldA而不是fieldB这种行为,因为fieldB是可为空的(因此在模型中它被包装在Optional中)。

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

没有杰克逊不提供验证API。 您可以通过在类中包含@JsonInclude(Include.NON_NULL)来忽略空值,或者使用来验证空值,如果条件不满足,该会进行验证并抛出错误。

更新:

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

在您的情况下:

public void setFieldA(String fieldA) {

    if (fieldA != null) {
        this.fieldA = fieldA;
    }
}
  相关解决方案