Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스프링 핵심 기능
- Android
- java
- Spring Boot
- 백준
- 인프런
- kotlin
- Thymeleaf
- jpa
- transaction
- JDBC
- springdatajpa
- 그리디
- db
- 스프링 핵심 원리
- 스프링
- 자바
- http
- Exception
- AOP
- QueryDSL
- JPQL
- SpringBoot
- Servlet
- 김영한
- spring
- 알고리즘
- pointcut
- Proxy
- Greedy
Archives
- Today
- Total
개발자되기 프로젝트
오류코드와 메시지 처리4, MessageCodesResolver 본문
1. MessageCodesResolver
- 검증 오류 코드로 메시지 코드들을 생성한다.
- MessageCodesResolver 인터페이스이고 DefaultMessageCodesResolver 는 기본 구현체이다.
- 주로 다음과 함께 사용 ObjectError , FieldError
2. Test - object
- errorCode="required"인 메시지를 찾아보자.
@Test
void messageCodesResolverObject(){
String[] messageCodes = codesResolver.resolveMessageCodes("required", "item");
for (String messageCode : messageCodes) {
System.out.println("messageCode = " + messageCode);
}
Assertions.assertThat(messageCodes).containsExactly("required.item", "required");
}
- 앞서 등록한 두 코드가 찾아졌다.
messageCode = required.item
messageCode = required
3. Test - Field
@Test
void messageCodesResolverField(){
String[] messageCodes = codesResolver.resolveMessageCodes("required", "item", "itemName", String.class);
for (String messageCode : messageCodes) {
System.out.println("messageCode = " + messageCode);
}
assertThat(messageCodes).containsExactly(
"required.item.itemName",
"required.itemName",
"required.java.lang.String",
"required"
);
}
- 4가지 code가 나온다.
messageCode = required.item.itemName
messageCode = required.itemName
messageCode = required.java.lang.String
messageCode = required
4. DefaultMessageCodesResolver 기본 메시지 생성 규칙
- 객체 오류
객체 오류의 경우 다음 순서로 2가지 생성
1.: code + "." + object name
2.: code
예) 오류 코드: required, object name: item
1.: required.item
2.: required
- 필드 오류
필드 오류의 경우 다음 순서로 4가지 메시지 코드 생성
1.: code + "." + object name + "." + field
2.: code + "." + field
3.: code + "." + field type
4.: code
예) 오류 코드: typeMismatch, object name "user", field "age", field type: int
1. "typeMismatch.user.age"
2. "typeMismatch.age"
3. "typeMismatch.int"
4. "typeMismatch"
5. 동작 방식.
- rejectValue() , reject() 는 내부에서 MessageCodesResolver 를 사용한다.
-
bindingResult.rejectValue("price", "range", new Object[]{1000, 10000}, null);
-
- 여기에서 메시지 코드들을 생성한다. -> 위의 규칙에 따라.
- FieldError , ObjectError 의 생성자를 보면, 오류 코드를 하나가 아니라 여러 오류 코드를 가질 수 있다.
- 오류 코드를 배열로 넘길 수 있다.
- MessageCodesResolver 를 통해서 생성된 순서대로 오류 코드를 보관한다.
- 이 부분을 BindingResult 의 로그를 통해서 확인해보자.
- codes [range.item.price, range.price, range.java.lang.Integer, range]
6. 오류 메시지 출력
- 타임리프 화면을 렌더링 할 때 th:errors 가 실행된다.
- 만약 이때 오류가 있다면 생성된 오류 메시지 코드를 순서대로 돌아가면서 메시지를 찾는다.
- 그리고 없으면 디폴트 메시지를 출력한다.
7. GitHub : 210924 MessageCodesResolver
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
오류코드와 메시지 처리6 (0) | 2021.09.24 |
---|---|
오류 코드와 메시지 처리 5 (0) | 2021.09.24 |
오류 코드와 메시지 처리3 (0) | 2021.09.24 |
오류 코드와 메시지 처리 2 (0) | 2021.09.24 |
오류 코드와 메시지 처리1 (0) | 2021.09.24 |
Comments