如何在更新时阻止Spring验证

时间:2016-04-12 08:41:24

标签: spring validation annotations

我为唯一的电子邮件制作了自定义验证注释(当用户注册时,程序会检查电子邮件是否已存在于数据库中)。

一切正常,但是当我需要修改用户信息而不是创建新信息时,我遇到了一个问题,“电子邮件已经在使用中”

我能否以某种方式仅关闭@UniqueEmail验证(我需要其他电子邮件模式和密码验证)?

所有验证注释都在同一个用户bean中。

谢谢。

2 个答案:

答案 0 :(得分:0)

我将假设您正在使用javax.validation

首先你需要一个interface OnUpdate

javax.validation.groups.Default

public interface OnUpdate extends Default {}

现在您需要设置所有需要UPDATE上运行的注释:

@NotNull(groups = OnUpdate.class)

现在,您已将验证分为两组,OnUpdateDefault。运行Default将包括OnUpdateOnUpdate Default {。}}的内容。

现在,这是一个有点棘手的地方 - 你需要告诉框架在每个任务上运行哪些验证。

如果使用JPA,您只需设置以下属性:

javax.persistence.validation.group.pre-update = com.my.package.OnUpdate

答案 1 :(得分:0)

进一步了解Boris Spider的答案,如果您要使用代码而不是使用persistence.xml来执行此操作,则可以创建以下bean:

  @Bean
  public HibernatePropertiesCustomizer hibernatePropertiesCustomizer(final Validator validator) {
    return new HibernatePropertiesCustomizer() {

      @Override
      public void customize(Map<String, Object> hibernateProperties) {
        @SuppressWarnings("rawtypes")
        Class[] classes = {OnUpdate.class};
        hibernateProperties.put("javax.persistence.validation.group.pre-update", classes);
      }
    };
  }