쌓고 쌓다
MessageCodesResolver 본문
MessageCodesResolver? 그게 뭔데
errors.properties
#Level1
required.item.itemName=상품 이름은 필수입니다.
#Level2
required=필수 값 입니다.
"required" 에러 코드(errorCode)를 만들때
"required.item.itemName"처럼 메시지를 세밀하게 만들 수 있고
"required"처럼 메시지를 단순화하여 사용할 수 있다.
단순화한 메시지는 넓게 사용이 가능하나. 세밀한 메시지는 좁은 범위에서 사용이된다.
즉, 에러 코드만으로 좁은 범위에서 넓은 범위로 메시지를 찾으며
우선순위에 맞춰 메시지를 찾아 사용할 수 있다.
스프링은 MessageCodesResolver가 위의 우선순위에 맞춰 메시지를 찾는 기능을 제공한다.
MessageCodesResolver
MessageCodesResolver codesResolver = new DefaultMessageCodesResolver();
1. 객체 에러
String[] messageCodes = codesResolver.resolveMessageCodes("required", "item");
// messageCodes: ["required.item", "required"]
2. 필드 에러
String[] messageCodes2 = codesResolver.resolveMessageCodes("required", "item", "itemName", String.class);
// messageCodes2: ["required.item.itemName", "required.itemName", "required.java.lang.String", "required"]
// String.class는 에러 필드의 타입을 넣어줌
String 배열에 담긴 값들을 보면 알겠지만
MessageCodesResolver는 에러 코드로 메시지 코드들을 생성해준다.
생성된 메시지 코드들에는 규칙이 있다.
객체 에러
1. code + "." + object name
2. code
필드 에러
1. code + "." + object name + "." + field
2. code + "." + field
3. code + "." + field type
4. code
MessageCodesResolver는 언제 쓰여?
BindingResult의 rejectValue(필드 에러 추가), reject(객체 에러 추가) 메서드 내부에서 MessageCodesResolver를 사용한다.
이 메서드에 에러 코드와 필드를 넘겨주면 메시지 코드들을 만들어 FieldError, ObjectError 생성시 보관한다.
BindingResult rejectValue, reject: https://non-stop.tistory.com/573
우리가 타임리프에서 오류 메시지 출력시 아래의 코드를 사용한다.
<div class="field-error" th:errors="*{itemName}">
상품명 오류
</div>
th:errors는 해당 필드에 에러가 있다면 생성된 메시지 코드들을 돌며 메시지를 찾아 출력한다.
만약 없다면 defaultMessage를 출력한다.
정리하자면
- rejectValue, reject 호출
- MessagCodesResolver를 이용해 에러 코드로 여러 메시지 코드를 생성
- new FieldError() 생성하며 메시지 코드들 보관
- th:errors에서 메시지 코드들로 메시지를 찾고 있으면 출력
'프로그래밍 > spring' 카테고리의 다른 글
properties의 한글 값 ??로 출력되는 문제 해결방법 (0) | 2023.08.30 |
---|---|
BindingResult rejectValue(), reject() (0) | 2023.08.30 |
[스프링 부트] BindingResult 메시지 properties 관리 (0) | 2023.08.29 |
[스프링 부트] BindingResult 사용 - 25 (0) | 2023.08.29 |
유효성 검사 직접 처리 및 폼 데이터 유지 방법 (0) | 2023.08.27 |
Comments