问题描述
我正在用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验证,但我宁愿不更改模型。
1楼
没有杰克逊不提供验证API。
您可以通过在类中包含@JsonInclude(Include.NON_NULL)
来忽略空值,或者使用来验证空值,如果条件不满足,该会进行验证并抛出错误。
更新:
对于您的评论答案,无论如何,如果只是想跳过fieldA值(如果为null),并让其他人(而不是setter方法)允许它们,则可以手动检查。
在您的情况下:
public void setFieldA(String fieldA) {
if (fieldA != null) {
this.fieldA = fieldA;
}
}