Spring Framework의 BindingResult 인터페이스에서 제공하는 메서드 reject()
, rejectValue()
를 통해 ObjectError
, FieldError
를 직접 생성하지 않고 검증 오류를 다룰 수 있다.
void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage);
void rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage);
field
: 오류가 발생한 필드의 이름errorCode
: 오류 코드를 지정. 이 오류 코드는 메시지에 등록된 코드가 아니라 MessageCodesResolver
를 위한 오류 코드입니다.defaultMessage
: 오류 메시지를 찾을 수 없을 때 사용하는 기본 메시지errorArgs
: 오류 메시지에서 사용할 추가 인수rejectValue()
메서드를 사용하면 오류 코드를 간단하게 입력할 수 있다. 예를 들어, range.item.price
대신 range
로만 지정해도 오류 메시지를 잘 찾아서 출력한다. 이러한 기능은 MessageCodesResolver
가 필드와 오류 코드를 바탕으로 다음과 같은 메시지 코드들을 만들어 내기 때문이다.
MessageCodesResolver
의 작동 원리bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null);
range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
위와 같이 rejectValue()
를 통해 오류를 등록하고 errors.properties
에 오류 메시지를 등록하면 MessageCodesResolver
는 range
라는 오류 코드를 다음과 같은 순서로 변환하여 메시지를 찾는다.
range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
range.price
range.item
range
설정된 메시지 파일에서 첫번재로 찾은 오류 코드에 맵핑된 오류 메시지 가격은 1000 ~ 1000000 까지 허용합니다.
를 출력한다.