Spring

Spring Validator와 JSR 303을 혼합하는 방법

기록만이살길 2021. 3. 13. 15:04
반응형

Spring Validator와 JSR 303을 혼합하는 방법

1. 질문(문제점):

어노테이션과 Spring Validator를 사용하여 유효성 검사를 수행하고 싶습니다.

Product.java

public class Product {
    private int id;
    @NotNull(message = "cannot be null")
    private String desc;

    // getters and setters
}

ProductValidator.java

public class ProductValidator implements Validator {
    public boolean supports(Class<?> aClass) {
        return Product.class.equals(aClass);
    }

    public void validate(Object obj, Errors errors) {
        Product p = (Product) obj;
        if (p.getId() <= 0) {
            errors.rejectValue("id", "id must be positive");
        }
    }
}

Main.java

public static void main(String[] args) {
    Product product = new Product();

    DataBinder binder = new DataBinder(product);
    binder.addValidators(new ProductValidator());
    binder.validate();

    System.out.println(binder.getBindingResult());
}

출력에서 두 가지 오류가 예상되었지만 Spring Validator의 오류 만 표시됩니다.

내가 무엇을 놓치고 있습니까?

2. 해결방안:

DataBinder 유효성 검사기는 처음에 비어 있습니다. 이행

다음과 같이 JSR 303 유효성 검사기를 추가해보십시오.

 ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

 DataBinder binder = new DataBinder(product);
 binder.addValidators(new ProductValidator());
 binder.addValidators(new SpringValidatorAdapter(factory.getValidator()));
 binder.validate();
65709733
반응형