[SPRING] 수동으로 Spring Annotation Validation 호출
SPRING수동으로 Spring Annotation Validation 호출
나는 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)와 같은 결과가 나타 납니까?
나 자신의 Validator 클래스를 만드는 것에 대해 알고있다.하지만 그것은 피하고 싶다. 클래스 변수 자체에 주석을 사용하는 것을 선호한다.
해결법
-
==============================
1.그의 대답에 Jaiwo99보다 더 한 걸음 나아 가기 :
그의 대답에 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에 대한 필수 링크.
-
==============================
2.다음은 JSR 303 스펙의 코드 샘플입니다.
다음은 JSR 303 스펙의 코드 샘플입니다.
Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); Driver driver = new Driver(); driver.setAge(16); Car porsche = new Car(); driver.setCar(porsche); Set<ConstraintViolation<Driver>> violations = validator.validate( driver );
그래서 네, 유효성 검사기 팩토리에서 유효성 검사기 인스턴스를 얻고 유효성 검사를 직접 실행 한 다음 위반이 있는지 여부를 확인하십시오. Validator에 대한 javadoc에서 유효성을 검사 할 그룹 배열을 받아 들일 수 있습니다.
명백히 Spring 유효성 검사 대신 JSR-303 유효성 검사를 직접 사용하지만 스프링 유효성 검사 주석이 클래스 경로에있는 JSR-303을 사용한다고 생각합니다.
-
==============================
3.모든 것을 올바르게 구성했다면 다음과 같이 할 수 있습니다.
모든 것을 올바르게 구성했다면 다음과 같이 할 수 있습니다.
@Autowired Validator validator;
그런 다음이를 사용하여 객체의 유효성을 검사 할 수 있습니다.
-
==============================
4.그리고 또한:
그리고 또한:
@Autowired @Qualifier("mvcValidator") Validator validator; ... violations = validator.validate(account);
from https://stackoverflow.com/questions/19190592/manually-call-spring-annotation-validation by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 보안 및 Java 구성을 사용하는 사용자 정의 인증 관리자 (0) | 2018.12.18 |
---|---|
[SPRING] 스프링 부트 : 임베디드 바람둥이에 다른 WAR 파일을 추가하는 방법은 무엇입니까? (0) | 2018.12.18 |
[SPRING] <spring : url />을 <a> 태그와 함께 사용하는 방법? (0) | 2018.12.18 |
[SPRING] 고유 한 bean을 가진 스프링 autowiring : 봄 예상되는 단일 일치하는 bean은 찾았지만 2 (0) | 2018.12.18 |
[SPRING] @Transactional 메서드에서 커밋을 수동으로 강제 실행하는 방법? [복제] (0) | 2018.12.18 |