BindingResult
스프링이 제공하는 검증 오류를 보관한다.
@ModelAttribute에 바인딩 하다가 에러가 나도 컨트롤러가 호출된다.
BindingResult가 없으면 타입 오류 발생 시 400 에러가 나면서 컨트롤러가 호출되지 않는다.
BindingResult가 있으면 타입 오류가 발생해도 오류 정보를 BindingResult에 담아 컨트롤러를 호출한다.
검증할 대상 바로 다음에 와야 한다.
ex. @ModelAttribute 바로 옆에 둬야 한다.
Model에 자동으로 포함되어 뷰에 넘어간다.
ValidationItemControllerV2
BindingResult
@ModelAttribute 옆에 위치해야 어떤 데이터를 바인딩 하는지 인식할 수 있다.
FieldError
필드 오류를 담는다.
ObjectError의 자식이다.
ObjectError
글로벌 오류를 담는다.
FieldError
objectName
@ModelAttribute 이름
field
오류가 발생한 필드 이름
defaultMessage
오류 기본 메시지
ObjectError
objectName
@ModelAttribute 이름
defaultMessage
오류 기본 메시지
BindingResult에 검증 오류를 적용하는 3가지 방법
@ModelAttribute에 타입 요류 등 바인딩이 실패하는 경우 스프링이 FieldError를 생성해 BindingResult에 넣는다.
개발자가 직접 코드 상으로 넣어준다.
Validator를 사용한다.
BindingResult와 Errors
BindingResult 인터페이스는 Errors 인터페이스를 상속한다.
인터페이스가 인터페이스를 받을 때는 extends를 쓴다.
실제 구현체는 BeanPropertyBindingResult다.
BindingResult, Errors 둘 다 구현하고 있기 때문에 실제 컨트롤러에 코드를 작성할 때는 Errors를 사용해도 된다.
Errors는 오류 단순 저장과 조회만 제공하기 때문에 기능이 별로 없다.
그래서 추가 기능을 제공하는 BindingResult를 많이 사용한다.
Last updated