BindingResult는 검증 오류를 보관하는 객체이다. BindingResult를 보관하는 방법은 세가지가 있다.
@ModelAttribute 객체에 타입 오류 등으로 바인딩이 실패하는 경우
예) 사용자가 정수형 필드에 문자를 넣었을 경우
바인딩이 실패하면 스프링이 FieldError를 생성해서 BindingResult 객체로 바인딩된다. (실패해도 컨트롤러는 실행된다.) BindingResult는 Model에 자동으로 포함되기 때문에 어떤 오류가 발생했는지 사용자에게 친절하게 알려줄 수 있다. (BindingResult가 없으면 400오류가 발생하면서 컨트롤러가 호출되지 않고 오류 페이지가 호출된다.)
개발자가 직접 정의한 경우
개발자는 검증을 수행해서 BindingResult에 직접 오류 객체를 넣을 수 있다.
validator를 사용한 경우
검증 로직을 validator로 분리하면 컨트롤러 코드를 간단하게 유지할 있다.
BindingResult 메서드를 사용할 때는 검증하는 코드 뒤에 사용되어야 한다.