Free Lines Arrow
본문 바로가기
Spring/spring mvc 2 스터디

[Spring] Validation: 오류코드, 메시지 처리

by skahn1215 2022. 2. 1.
728x90
반응형

오류코드, 메시지 처리

  • 오류코드로 에러 메세지를 관리해보자

스프링부트 메시지 설정 추가

spring.messages.basename=messages,errors

 

errors.properties 추가

  • {} 해당 태그를 사용하면 파라미터를 받을수 있다.
required.item.itemName=상품 이름은 필수입니다.
range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
max.item.quantity=수량은 최대 {0} 까지 허용합니다.
totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}

 

FieldError에 에러코드 적용

에러코드 적용예제

if (!StringUtils.hasText(item.getItemName())) {
    bindingResult.addError(new FieldError("item", "itemName",
        item.getItemName(), false, new String[]{"required.item.itemName"}, null,
        null));
}

 

파라미터 적용예제

if (item.getQuantity() == null || item.getQuantity() > 10000) {
    bindingResult.addError(new FieldError("item", "quantity",
    item.getQuantity(), false, new String[]{"max.item.quantity"}, new Object[]
    {9999}, null));
 }

 

 

FieldError 개선하기

  • FieldError, ObjectError는 다루기가 번거롭다.
  • 좀더 자동화를 해보자
  • 컨트롤러에서 BindingResult 의 위치가 힌트다
    - target 바로뒤에 BindingResult가 온다.
    - 따라서 이미 검증해야될 target을 알고 있다.

rejectValue 함수를 사용

생성자

  • field: 오류필드명
  • errorCode: 오류코드
  • errorArgs: 오류메시지에서 {0}을 치환하기 위한값
  • defaultMessage: 오류메시지를 찾을수 없을때 사용하는 기본메시지
void rejectValue(@Nullable String field, String errorCode,
    @Nullable Object[] errorArgs, @Nullable String defaultMessage);
  • 코드가 훨씬 간결해 졌다.

예제

if (!StringUtils.hasText(item.getItemName())) {
    bindingResult.rejectValue("itemName", "required");
}

 

 

오류코드 만들기

  • 오류코드는 단순하게 만들수 있고 복잡하게 만들수 있다.
  • 오류코드를 등록하면(errors.properties) MessageCodesResolver가 
  • 상세한 것을 먼저 확인하고 없으면 범용적인것을 순서대로 확인한다.

 

MessageCodesResolver

  • 검증 오류 코드로 메시지 코드들을 생성한다.
  • MessageCodesResolver 인터페이스이고 DefaultMessageCodesResolver 는 기본 구현체이다.
  • ObjectError , FieldError를 주로 사용한다.

객체 오류

예) 오류 코드: required, object name: item
1.: required.item
2.: required

 

필드 오류

예) 오류 코드: typeMismatch, object name "user", field "age", field type: int
1. "typeMismatch.user.age"
2. "typeMismatch.age"
3. "typeMismatch.int"
4. "typeMismatch"

 

동작방식

  • rejectValue() , reject() 는 내부에서 MessageCodesResolver 를 사용한다.
  • FieldError , ObjectError 의 생성자를 보면 여러 오류 코드를 가질 수 있다.
  • MessageCodesResolver 를 통해서 생성된 순서대로 오류 코드를 보관한다

 

728x90
반응형

'Spring > spring mvc 2 스터디' 카테고리의 다른 글

[Spring] 로그인 처리 쿠키  (0) 2022.04.16
[Spring] Validation: Validator  (0) 2022.02.02
[Spring] Validation: BindingResult  (0) 2022.02.01
[Spring] thymeleaf 예제  (0) 2022.01.06
[Spring] thymeleaf 기본 문법  (0) 2021.12.19

댓글