How to combine JSR-303 and Spring Validator class in a service layer?

后端 未结 1 1354
Happy的楠姐
Happy的楠姐 2020-12-16 06:39

I have some model class

public class Account {

    @Email
    private String email;

    @NotNull
    private String rule;
}

and spring-va

相关标签:
1条回答
  • 2020-12-16 07:14

    Spring provides an Adapter to merge both validation APIs. See the current Spring JavaDoc for more information.

    An possible implementation would be

    public class AccountValidator implements Validator {
    
      private final SpringValidatorAdapter validator;
    
      public AccountValidator(SpringValidatorAdapter validator) {
          super();
          this.validator = validator;
      }
    
      @Override
      public boolean supports(Class aClass) {
          return Account.class.equals(aClass);
      }
    
      @Override
      public void validate(Object obj, Errors errors) {
    
          //jsr303
          validator.validate(obj, errors);
    
          //custom rules
          Account account = (Account) obj;
          complexValidateRule(account.getRule(), errors);
      }
    
      private void complexValidateRule(String rule, Errors errors) {
          // ...
      }
    }
    
    0 讨论(0)
提交回复
热议问题