Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Bean Validation - Spring 적용 본문

인프런/[인프런] 스프링 MVC 2

Bean Validation - Spring 적용

Seung__ 2021. 9. 25. 13:51

1. Spring적용을 해보자.


  • 기존에 등록한 ItemValidator를 제거!
  • 어? 그래도 검증기 돌아간다.?

번역스멜?

 

 

 

2. Spring MVC는 어떻게 Bean Validation 사용?


  • Spring Boot가 spring-boot-starter-validation 라이브러리를 넣으면 
  • 자동으로 Bean Validator를 인지하고 스프링에 통합함.
  • Spring Boot는 자동으로 글로벌 Validator를 등록한다.
    • LocalValidatorFactoryBean 을 글로벌 Validator로 등록
    • 이 Validator는 @NotNull 같은 @Annotation을 보고 검증을 수행 
    • 글로벌 Validator가 적용되어 있기 때문에, Validator를 사용하기 위해서는
    • 원하는 target 앞에  @Valid , @Validated 만 적용하면 된다.
    • public String addItem(@Validated @ModelAttribute Item item, 
      		BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) {
    • 검증 오류가 발생하면, FieldError , ObjectError 를 생성해서 BindingResult 에 담아준다.
  • 주의
    • 만약 직접 글로벌 Validator를 직접 등록하면
    • Spring Boot는 Bean Validator를 글로벌 Validator 로 등록하지 않는다. 
    • 따라서 @Annotation 기반의 Bean Validator가 동작하지 않는다.

 

 

 

3. 검증 순서


  • @ModelAttribute 각각의 필드에 타입 변환 시도
    • 성공하면 다음으로
    • 실패하면 typeMismatch 로 FieldError 추가
  • Validator 적용
    • 바인딩에 성공한 필드만 Bean Validation 적용
    • BeanValidator는 바인딩에 실패한 필드는 BeanValidation을 적용하지 않음.
    •  타입 변환에 성공해서 바인딩에 성공한 필드여야 BeanValidation 적용이 의미 있음.
    • (일단 모델 객체에  정상으로 들어와야 검증이 의미가 있음.)
    • 예시
      • itemName 에 문자 "A" 입력 -> 타입 변환 성공 -> itemName 필드에 BeanValidation 적용
      • price 에 문자 "A" 입력 -> "A"를 숫자 타입 변환 시도 실패->  typeMismatch FieldError 추가
        -> price 필드는 BeanValidation 적용 X

 

4. GitHub : 210925 Bean Validation, Spring


 

GitHub - bsh6463/Validation-V1

Contribute to bsh6463/Validation-V1 development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글

Bean Validation - Object Error  (0) 2021.09.25
Bean Validation - Error Code  (0) 2021.09.25
Bean Validation - 시작  (0) 2021.09.25
Bean Validation  (0) 2021.09.25
Validator 분리 2  (0) 2021.09.24
Comments