Hansel
검증 처리 / BindingResult 2 본문
이전까지는 각각의 파라미터에 맞는 타입과 데이터들을 넣어 에러를 처리했다.
하지만 FieldError와 ObjectError를 모두 신경쓰고 파라미터 하나하나 맞춰주는건 생각보다 귀찮은 일이다.
간소화 / rejectValue
컨트롤러에서 BindingResult 는 검증해야 할 객체인 target 바로 다음에 온다. 따라서
BindingResult 는 이미 본인이 검증해야 할 객체인 target 을 알고 있다.
BindingResult 가 제공하는 rejectValue() , reject() 를 사용하면 FieldError , ObjectError 를 직접 생성하지 않고, 깔끔하게 검증 오류를 다룰 수 있다.
rejectValue의 파라미터는 다음과 같다.
void rejectValue(@Nullable String field, String errorCode,
@Nullable Object[] errorArgs, @Nullable String defaultMessage);
- field : 오류 필드명
- errorCode : 오류 코드(이 오류 코드는 메시지에 등록된 코드가 아니다.)
- errorArgs : 오류 메시지에서 {0} 을 치환하기 위한 값
- defaultMessage : 오류 메시지를 찾을 수 없을 때 사용하는 기본 메시지

FieldError() 를 직접 다룰 때는 오류 코드를 range.item.price 와 같이 모두 입력했다. 그런데
rejectValue() 를 사용하고 부터는 오류 코드를 range 로 간단하게 입력했다.
#Level1
required.item.itemName: 상품 이름은 필수 입니다.
#Level2
required: 필수 값 입니다.
만약 이런식으로 메세지가 작성되어 있다면
첫번째 if문의 경우 required로 메세지를 탐색한다.
우리가 명시한 field는 itemName이기 때문에 메세지 중 첫번째가 선택이 될것이다.
이런식으로 메세지를 다양화할 수 있다.
객체 오류의 순서
1.: code + "." + object name
2.: code
필드 오류의 순서
1.: code + "." + object name + "." + field
2.: code + "." + field
3.: code + "." + field type
4.: code

핵심은 구체적인 것에서 덜 구체적인 것으로 가야한다는 것이다.
MessageCodesResolver 는 required.item.itemName 처럼 구체적인 것을 먼저 만들어주고,
required 처럼 덜 구체적인 것을 가장 나중에 만든다.
이렇게 하면 메시지와 관련된 공통 전략을 편리하게 도입할 수 있다.
'Spring > MVC' 카테고리의 다른 글
| 검증 처리 / Bean Validation (0) | 2022.03.29 |
|---|---|
| 검증 처리 / Validator (0) | 2022.03.29 |
| 검증 처리 / BindingResult (0) | 2022.03.29 |
| 6. 메세지와 국제화 (0) | 2022.03.29 |
| 5. 스프링 MVC / 기타 (0) | 2022.03.26 |