오류 메시지 처리(2)

2023. 7. 14. 15:54·Spring
728x90

오류 코드를 만들 때 다음과 같이 자세히 만들 수도 있고,

required.item.itemName : 상품 이름은 필수입니다.

range.item.price : 상품의 가격 범위 오류 입니다.

 

또는 다음과 같이 단순하게 만들 수도 있다.

required : 필수 값 입니다.
range : 범위 오류 입니다.

 

단순하게 만들면 범용성이 좋아서 여러곳에서 사용할 수 있지만, 메시지를 세밀하게 작성하기 어렵다. 반대로 너무 자세하게 만들면 범용성이 떨어진다. 가장 좋은 방법은 범용성으로 사용하다가, 세밀하게 작성해야 하는 경우에는 세밀한 내용이 적용되도록 메시지에 단계를 두는 방법이다.

예를 들어서 required 라고 오류 코드를 사용한다고 가정해보자.

다음과 같이 required 라는 메시지만 있으면 이 메시지를 선택해서 사용하는 것이다.

 

required: 필수 값 입니다.

 

그런데 오류 메시지에 required.item.itemName 와 같이 객체명과 필드명을 조합한 세밀한 메시지

코드가 있으면 이 메시지를 높은 우선순위로 사용하는 것이다.

 

#Level1

required.item.itemName: 상품 이름은 필수 입니다.

#Level2

required: 필수 값 입니다.

 

물론 이렇게 객체명과 필드명을 조합한 메시지가 있는지 우선 확인하고, 없으면 좀 더 범용적인 메시지를 선택하도록 추가 개발을 해야겠지만, 범용성 있게 잘 개발해두면, 메시지의 추가 만으로 매우 편리하게 오류 메시지를 관리할 수 있을 것이다.

스프링은 MessageCodesResolver 라는 것으로 이러한 기능을 지원한다.

 

MessageCodesResolver

검증 오류 코드로 메시지 코드들을 생성한다.
MessageCodesResolver 인터페이스이고 DefaultMessageCodesResolver 는 기본 구현체이다.

주로 다음과 함께 사용 ObjectError , FieldError

 

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"

 

rejectValue(), reject()는 내부에서 MessageCodeResolver를 사용

FieldError , ObjectError 의 생성자를 보면, 오류 코드를 하나가 아니라 여러 오류 코드 가질 수 있다.

MessageCodesResolver 를 통해서 생성된 순서대로 오류 코드를 보관

 

이 부분을 BindingResult 의 로그를 통해서 확인해보자.

     codes [range.item.price, range.price, range.java.lang.Integer, range]

 

FieldError rejectValue("itemName", "required") 다음 4가지 오류 코드를 자동으로 생성

required.item.itemName
required.itemName
required.java.lang.String
required

ObjectError reject("totalPriceMin") 다음 2가지 오류 코드를 자동으로 생성

totalPriceMin.item
totalPriceMin

 

오류 메시지 출력

타임리프 화면을 렌더링 할 때 th:errors 가 실행된다.

만약 오류가 있다면 생성된 오류 메시지 코드를 순서대로 돌아가면서 메시지를 찾는다. 그리고 없으면 디폴트 메시지를 출력한다.

728x90

'Spring' 카테고리의 다른 글

스프링 인터셉터 - 요청 로그  (0) 2023.08.03
스프링 인터셉터(interceptor)  (0) 2023.08.03
오류 메시지 처리  (0) 2023.07.14
검증 - Validation  (0) 2023.07.04
웹 애플리케이션에 메시지+국제화 적용  (0) 2023.07.03
'Spring' 카테고리의 다른 글
  • 스프링 인터셉터 - 요청 로그
  • 스프링 인터셉터(interceptor)
  • 오류 메시지 처리
  • 검증 - Validation
Bello's
Bello's
개발하는 벨로
  • Bello's
    벨로의 개발일지
    Bello's
  • 전체
    오늘
    어제
    • 분류 전체보기 (199) N
      • 노예 일지 (7)
        • 스타트업 노예일지 (3)
      • CS 이론 (81)
        • 학과 수업 (4)
        • 알고리즘 (64)
        • 시스템 프로그래밍 (3)
        • 데이터 통신 (1)
        • 운영체제 (2)
        • 데이터베이스 (1)
      • project (3)
      • 나는 감자다. (4)
      • Spring (27)
      • 모각코 (45)
        • 절개와지조(모각코) (7)
        • 어쩌다보니 박준태가 조장이조 (11)
        • 어쩌다보니 박준태가 또 조장이조 (12)
      • LikeLion🦁 (20)
      • 캘리포니아 감자 (4)
      • OpenSource Contribute (1)
      • 우아한테크벨로 (1) N
        • 프리코스 회고록 (6) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    모각코
    타임리프
    뛰슈
    DFS
    나는 감자
    누적합
    프리코스
    JPA
    어렵다
    BFS
    회고록
    백준
    자바
    그래프 순회
    오블완
    절개와지조
    감자
    티스토리챌린지
    8기
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Bello's
오류 메시지 처리(2)
상단으로

티스토리툴바