BindingResult - reject(), rejectValue()

김학준·2024년 6월 17일
0

게시판

목록 보기
15/44

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에 오류 메시지를 등록하면 MessageCodesResolverrange라는 오류 코드를 다음과 같은 순서로 변환하여 메시지를 찾는다.

  1. range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
  2. range.price
  3. range.item
  4. range

설정된 메시지 파일에서 첫번재로 찾은 오류 코드에 맵핑된 오류 메시지 가격은 1000 ~ 1000000 까지 허용합니다. 를 출력한다.

0개의 댓글