Spring MVC/Validation

Validation 검증 - BindingResult란?

Hcode 2022. 12. 2.

 

 

이전 글로 Validation 검증이란? 에 대해 알아봤습니다.
 

Validation 검증 - 검증이란?

Validation을 하는 이유 폼 입력 시 검증 오류가 발생하면 오류 화면으로 바로 이동하게 됩니다. 이렇게 되면 사용자는 해당 폼으로 이동하여, 처음부터 다시 입력을 해야 합니다. Controller의 중요한

hhhhicode.tistory.com

이번 글로 BindingResult에 대해 알아봅시다.

 


 

BindingResult 란?

  • BindingResult는 스프링이 제공하는 검증 오류 처리 방법의 핵심입니다.
  • BindingResult는 스프링이 제공하는 검증 오류를 보관하는 객체입니다.
  • 검증 오류가 발생하면 BindingResult 객체에 보관하면 됩니다.

 


 

BindingResult가 있으면

@ModelAttribute에 데이터 바인딩 오류가 발생했을 때
 BindingResult에 오류 정보가 담기게 되고 Controller가 정상 호출됩니다.

 


 

BindingResult가 없으면

400 오류가 발생하게 되고
 Controller가 호출되지 않으며
  Error Page로 이동하게 됩니다.

 


 

BindingResult 적용 시 Controller가 무사히 호출되는 이유

ArgumentResolver

  • HandlerAdapter → ArgumentResolver → Handler

ArgumentResolver가 호출되면서 파라미터가 바인딩됩니다.

 

이때 Validation이 적용되며,
 바인딩 실패 시 BindingResult에 마치 try-catch가 작동하는 것처럼, 오류 정보가 담기게 됩니다.
그러므로 ArgumentResolver가 무사히 적용되고 Controller가 호출되는 것입니다.

 


 

@ModelAttribute

@ModelAttribute는 필드 하나하나에 대한 바인딩됩니다.
바인딩 오류가 발생하는 필드를 제외한 다른 필드는 제대로 바인딩되고
 이어서 Controller까지 호출이 됩니다.

 

또한 이때 상황에 따라 HttpMessageResolver도 호출되게 됩니다. HttpMessageResolver에도 Validation이 적용되지만,
 HttpMessageResolver는 @ModelAttribute처럼 필드 하나하나 바인딩되는 구조가 아닙니다.
그렇기 때문에 바인딩 실패 시 Exception이 발생하게 되고, 이는 Exception 처리가 필요합니다.
해당 부분은 추후에 포스팅합니다.

 


 

다음으로 Validation 오류를 담는 객체인 BindingResult의 사용에 대해 알아봅시다.
 

Validation 검증 - BindingResult 사용

BindingResult 사용 BindingResult가 사용되는 위치 FieldError ObjectError BindingResult에 검증 오류를 담는 3가지 방법 을 다룹니다. BindingResult가 사용되는 위치 BindingResult는 @ModelAttribute의 객체 다음에 와야 합

hhhhicode.tistory.com

 

댓글