위의 코드 처럼 파라미터도 너무 많고, 오류 코드를 자동화 하기 어렵다.
즉 다루기가 너무 번거롭다.
BindingResult는 검증해야할 객체인 'target' 바로 다음에 온다.
--> 즉 BindingResult는 검증해야 할 객체가 item인 것을 알고 있고 따라서new FiledError("item", .... )
처럼 objectName을 쓰지 않아도 된다는 것이다.
위의 코드 처럼 log를 찍어봐도 bindingResult는 검증 해야할 객체인 item에 대해 알고 있다.
BindingResult가 제공하는 rejectValue(), reject()를 사용하면 FieldError, ObjectError를 직접 생성하지 않고 깔끔하게 검증 오류를 다룰 수 있다.
void rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage);
void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage);
cf) errorCode는 errors.properties에 등록된 오류 코드가 아닌 MessageCodesResolver를 위한 오류 코드이다.)
FieldError에서 오류 코드를 다룰 때 range.item.price와 같이 모두 입력 했지만 rejectValue()에서는 range로 간단하게 입력했다.
출처 : 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술