V2.3 오류 코드 메시지 처리

알파로그·2023년 3월 26일
0

Spring MVC 활용 기술

목록 보기
35/42

🔗 요구사항 확인

✏️ 오류 메시지 일관성 유지

🔗 메시지와 국제화

🔗 메시지파일

📍 문제점 분석

  • 지금까지 구현한 로직의 에러 메시지는 검증 로직마다 그때그때 개발자가 입력했다.
    • 이 방법은 개발자가 직접 입력해줘야 되기 때문에 신경쓰지 못하면 메시지의 일관성이 떨어지게 된다.
    • 메시지 파일에 에러 메시지를 등록해 일관화 시킬 수 있다.
    • addError 의 5 , 6 번째 파라미터를 사용하면 된다.
if (!StringUtils.hasText(item.getItemName()))
    bindingResult.addError(new FieldError(
            "item",
            "itemName",
            item.getItemName(), false, null, null,
            "상품 이름은 필수입니다.")
    );

📍 메시지 파일 생성

  • message 파일 생성
    • errors.properties
required.item.itemName=상품 이름은 필수입니다.
range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
max.item.quantity=수량은 최대 {0} 까지 허용합니다.
totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}
  • application properties 에 message 파일을 지정해준다.
    • , 로 다수의 파일을 basename 으로 설정할 수 있다.
spring.messages.basename=messages,errors

📍 메시지 파일 적용

  • 필드 검증
    • 메시지코드와 argument 매개변수에 배열형태로 입력해주면 된다.
      • 배열로 입력하는 이유는 0번 index 가 없다면 1번 index 가 출력되는 방식으로 우선순위를 설정할 수 있게 하기 위해서다.
      • 만약 배열에서 메시지를 찾지못하면 디폴트 메시지가 출력된다.
      • 만약 디폴트 메시지도 null 이라면 500 에러가 발생한다.
    • 메시지 코드 : new String[]{…}
    • Argument : new Object[]{…}
      • Argument 가 없다면 null 을 입력하면 된다.
    • 기본 메시지는 이제 사용하지 않으므로 null 을 입력해준다.
if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 100000)
    bindingResult.addError(new FieldError(
            "item",
            "price",
            item.getPrice(), false,
            new String[]{"range.item.price"},
            new Object[]{1000, 1000000}, null)
    );
  • 글로벌 검증
    • 필드검증과 마찬가지로 코드와 아규먼트를 입력해주면 된다.
if (item.getPrice() != null && item.getQuantity() != null) {
    int resultPrice = item.getPrice() * item.getQuantity();
    if (resultPrice < 10000)
        bindingResult.addError(new ObjectError(
                "item",
                new String[]{"totalPriceMin"},
                new Object[]{10000, resultPrice}, null
        ));
}
profile
잘못된 내용 PR 환영

0개의 댓글