Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

오류코드와 메시지 처리4, MessageCodesResolver 본문

인프런/[인프런] 스프링 MVC 2

오류코드와 메시지 처리4, MessageCodesResolver

Seung__ 2021. 9. 24. 22:15

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


 

GitHub - bsh6463/Validation-V1

Contribute to bsh6463/Validation-V1 development by creating an account on GitHub.

github.com

 

Comments