입력값 검증 및 에러 메시지 표시 동작 원리

Codren·2021년 9월 29일
2

입력값 검증 및 에러 메시지 표시

  • Spring Boot 쇼핑몰 프로젝트에서 상품을 등록할 때, POST 요청으로 전송된 입력값을 검증하고, 문제가 있을 시에 해당되는 에러 메시지를 화면에 표시하는 동작 원리에 대한 궁금증




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 필드의 에러 메시지를 출력

0개의 댓글