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 |
댓글