- Spring Boot 쇼핑몰 프로젝트에서 상품을 등록할 때, POST 요청으로 전송된 입력값을 검증하고, 문제가 있을 시에 해당되는 에러 메시지를 화면에 표시하는 동작 원리에 대한 궁금증
- Displaying Error Messages with Thymeleaf in Spring (Baeldung 참고)
Validation
1. 검증 대상 객체
- 검증 관련 어노테이션을 멤버변수(필드)에 지정하여 입력값에 대한 규칙을 정함
- 정해진 규칙을 벗어날 시 표시할 error message 지정
2. @Valid
- POST 요청을 받았을 때, 해당 요청 값들로 구성된 객체를 검증하는 어노테이션
- 각 필드의 입력값이 정해진 Validation 규칙을 따르는지 판단
3. BindingResult
- 검증 대상 객체와 검증 결과에 대한 정보를 담고 있는 객체
- 파라미터의 위치는 @Valid 객체 바로 뒤에 선언해야 함 (중요)
- Application Debug Mode 에서 잘못된 입력값을 보냈을 시
- 검증 대상 객체(target)와 검증 결과(errors)에 대한 정보를 담고있는 BindingResult 객체 생성됨
- errors 에는 어떤 객체의 어떤 필드에서 에러가 발생했는 지에 대한 정보를 자세히 담고 있음
- BindingResult 객체에 대한 정리된 정보를 아래와 같이 볼 수 있음
4. Controller Model
- PostMapping Controller 의 매개변수로 @Valid 객체, BindingResult 객체, Model 객체를 지정하면 View 단으로 넘기는 Model 객체에 @Valid 객체와 BindingResult 객체를 자동으로 addAttribute 수행
Error Message
1. 상품 등록 페이지
- bindingResult.hasErrors() 값이 True 이면 (= 검증 결과 입력값에 문제가 있다고 판단) 다시 상품 등록 페이지로 돌아오게 되고, Controller 단에서 전달 받은 model 객체 내부의 itemFormDto 와 bindingResult 객체를 이용해 error message 표시
2. #fields.hasErrors('FieldNm')
- Thymeleaf Builtin 메소드
- 'FieldNm' 필드명을 매개변수로 전달 받아 bindingResult 에서 해당 필드에 error 가 존재하는지 판단
3. errors="*{FieldNm}"
- bindingResult 에서 FieldNm 필드의 에러 메시지를 출력