如何定义哪个验证组应用于Spring Data Repository操作?

时间:2019-06-27 14:26:17

标签: spring spring-data-jpa spring-data bean-validation

我有一个JPA Spring数据存储库。我能以某种方式定义Hibernate用于给定操作的验证组吗(让我们说保存)?在某些情况下,我需要验证某些组,而在其他情况下则不需要。这将取决于服务水平。 Spring Data可能吗?

如果我可以定义验证组的话,这对我也是可以的,这些验证组仅用于新对象,而不用于更新。

1 个答案:

答案 0 :(得分:0)

糟糕。抱歉。此解决方案适用于Spring Data Rest。

如果您使用Spring Data JPA,则必须在每次JPA调用之前手动进行验证。

------已编辑

@Configuration
@RequiredArgsConstructor
protected class RepositoryConfig implements RepositoryRestConfigurer {
  private static final String BEFORE_CREATE = "beforeCreate";
  private static final String BEFORE_SAVE = "beforeSave";

  @Override
  public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
    validatingListener.addValidator(BEFORE_CREATE, createValidator());
    validatingListener.addValidator(BEFORE_SAVE, saveValidator());
  }
}

实现createValidator()saveValidator() bean:

public class CreateValidator implements Validator {
  private final LocalValidatorFactoryBean smartValidator;

  @Override
  public boolean supports(Class<?> clazz) {
    return true;
  }

  @Override
  public void validate(Object target, Errors errors) {
    smartValidator.validate(target, errors, {whatEverHintsYouWant} );
  }
}

将服务bean注入其中,并根据需要在其中计算提示。

您甚至可以使用supports方法为每个实体创建不同的验证器。