【问题标题】:How to use @Valid with custom validation?如何将@Valid 与自定义验证一起使用?
【发布时间】:2011-09-13 13:58:29
【问题描述】:

我正在使用休眠验证注释框架来验证我的域类 并使用@Valid 注释验证我的域对象,如下所示:

@RequestMapping(method = RequestMethod.POST)
    public String post(@Valid @ModelAttribute("person") Person person,BindingResult errors) {...}

我想知道是否要进行自定义验证,例如检查数据库中是否存在电子邮件

我现在正在做的是在域中拥有一个属性:

@AssertFalse(message = "{email.missmatch}")
private boolean emailExist;

我在 post 方法中设置它:

person.setEmailExist(personDao.isEmailExist(person.getEmail()));

上面正在使用自定义休眠验证器类,我必须验证域 我在设置属性后调用了验证器

但现在使用@Valid,在设置属性之前调用验证器

那么,在这种情况下是否有使用@Valid 的解决方案? 或者它不起作用,如果它不起作用,请建议我在这种情况下如何验证我的域类而不是使用@Valid,使用什么?

提前致谢。

【问题讨论】:

    标签: spring spring-mvc hibernate-validator


    【解决方案1】:

    您可以编写您自己的验证器,因此您不需要带有 tbat 标记属性的“hack”。 jsr303 Bean Validation - 规范中描述了如何编写这样的自定义验证。谷歌一下,你也会找到很多带有示例的博客。

    【讨论】:

      【解决方案2】:

      我使用了自定义 javax 验证器:

      Validator validator = Validation.buildDefaultValidatorFactory()
                      .getValidator();
              Set<ConstraintViolation<Person>> cvs = validator.validate(person);
              for (ConstraintViolation<Person> cv : cvs) {
                  String field = cv.getPropertyPath().toString();
                  errors.addError(new FieldError("person", field, cv.getMessage()));
              }
      

      效果很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-14
        • 1970-01-01
        • 2015-10-02
        相关资源
        最近更新 更多