繁体   English   中英

是否可以仅在对象字段不为空时才对其进行验证?

[英]Is it possible to validate an object field only if it is not null?

这个问题有两个现有的变体:

  1. 仅在字段不为 Null 时验证:有条件地处理String字段的解决方案
  2. Hibernate 验证 - 仅在 object 不为 null 时验证:唯一的答案演示了手动触发验证时如何处理它的行为和提示。

我的问题添加了在可能为空的对象上使用 @Valid 时如何执行此操作的限定符。

这里的用例是我们有两个字段,其中一个或另一个需要不为空(包含字段的类上的自定义验证器)。 当一个不为空时,我需要它是有效的。 然后我是否需要在我的自定义验证器中完全手动验证该对象,给它增加比预期更多的责任?

在这种情况下仅使用注释会导致抛出 NullPointerException,这会在处理之前将其中断验证。 目前没有办法做到这一点吗?

@Valid引用仅在它们不为空时才被遵循,因此必须是其他原因导致您的 NPE。

@Valid引用似乎只有在它们不为空时才被遵循。 如果我提供自定义验证注释而不检查 null,它会引发 NPE。 您需要自己在验证器中检查空值。

例如:

    public class EmailListValidator implements ConstraintValidator<EmailListConstraint, String> {

    @Override
    public void initialize(final EmailListConstraint emailListConstraint) {
    }

    @Override
    public boolean isValid(final String emailList, final ConstraintValidatorContext cxt) {
        if (emailList != null) {
           // Validation logic here      
        }
        return true;
    }
}

这是 baeldung 网站上关于如何实现自定义验证注释的链接: https ://www.baeldung.com/spring-mvc-custom-validator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM