BindingResult는 스프링이 제공하는 검증 오류를 보관하는 객체이다.
이 경우 BindingResult가 있으면 바인딩 하는 과정에서 문제가 발생하더라도, 오류 정보가 BindingResult 객체에 담기고 컨트롤러를 정상적으로 호출한다. 반면 BindingResult가 없는 경우에는 컨트롤러가 호출되지 않고, 클라이언트 화면에 오류 페이지가 보여진다.
오류 발생시 사용자 입력 값을 저장하는 기능을 제공하는 rejectedValue/reject를 사용하여 사용자가 값을 잘못 입력하더라도 입력한 값이 사라지지 않고 그대로 화면에 출력되도록 한다.
bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null);
2번째 파라미터로 입력한 값을 참고하여 해당하는 메시지 코드들을 불러와 사용한다. 만일 range.item.price와 같이 객체명과 필드명을 조합한 상세한 메시지 코드와 range와 같이 단순한 메시지 코드가 동시에 존재한다면, 상세한 메시지 코드의 오류 메시지를 우선순위로 사용한다.
rejectValue(), reject()는 내부에서 MessageCodesResolver를 사용하여 정해진 순서대로 메시지 코드들을 생성 후 보관한다. MessageCodesResolver는 정해진 규칙대로 오류 코드들을 생성한다.
참조
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2