java - 설정 - 수동으로 Spring Annotation Validation 호출




validation failed for object (3)

나는 Hibernate와 Spring Annotation으로 우리의 검증을 많이하고있다.

public class Account {
    @NotEmpty(groups = {Step1.class, Step2.class})
    private String name;

    @NotNull(groups = {Step2.class})
    private Long accountNumber;

    public interface Step1{}
    public interface Step2{}
}

그리고 컨트롤러에서 그것은 인수에서 호출됩니다 :

public String saveAccount(@ModelAttribute @Validated({Account.Step1.class}) Account account, BindingResult result) {
   //some more code and stuff here
   return "";
}

그러나 나는 컨트롤러 방법에서 어떤 논리를 기반으로 사용되는 그룹을 결정하고 싶습니다. 유효성 검사를 수동으로 호출하는 방법이 있습니까? result = account.validate(Account.Step1.class) 와 같은 result = account.validate(Account.Step1.class) 납니까?

나 자신의 Validator 클래스를 만드는 것에 대해 알고있다.하지만 그것은 피하고 싶다. 클래스 변수 자체에 주석을 사용하는 것을 선호한다.


그리고 또한:

@Autowired
@Qualifier("mvcValidator")
Validator validator;

...
violations = validator.validate(account);

그의 대답에 Jaiwo99 보다 더 한 걸음 나아 가기 :

// org.springframework.validation.SmartValidator - implemented by
//     LocalValidatorFactoryBean, which is funny as it is not a FactoryBean per se (just saying)
@Autowired
SmartValidator validator;

public String saveAccount(@ModelAttribute Account account, BindingResult result) {
    // ... custom logic
    validator.validate(account, result, Account.Step1.class);
    if (result.hasErrors()) {
        // ... on binding or validation errors
    } else {
        // ... on no errors
    }
    return "";
}

관심이 있다면 SmartValidator JavaDoc에 대한 필수 링크 .


모든 것을 올바르게 구성했다면 다음과 같이 할 수 있습니다.

@Autowired
Validator validator;

그런 다음이를 사용하여 객체의 유효성을 검사 할 수 있습니다.







spring-mvc