Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
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
Tags
more
Archives
Today
Total
관리 메뉴

우당탕탕 개발자 되기

오류 코드 메시지 처리 본문

Spring

오류 코드 메시지 처리

KimMINHun 2021. 10. 7. 23:42

FieldError, ObjectError 의 생성자

: errorCode, arguments를 제공하는데 오류 발생시 오류 코드로 메시지를 찾기위해 사용

 

error.properties 파일 생성 

- 오류 메시지를 구분하기 쉽게 파일로 관리

-> 스프링 부트에 파일을 인식할 수 있도록 설정 필요

 

application.properties 에 추가

spring.messages.basename=messages,errors

V1

메시지 처리 전

bindingResult.addError(new FieldError("item", "itemName",
item.getItemName(), false, null, null, "상품 이름은 필수입니다."));

메시지 처리 후

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

 

rejectValue(), reject()

: BindingResult 가 제공하는 rejectValue(), reject() 를 사용하면 FieldError, ObjectError 를 직접 생성하지 않고 깔끔하게 검증 오류를 다룰수 있다.

V2

 

메시지 처리 후

bindingResult.rejectValue("itemName", "required");

rejectValue()

void rejectValue(@Nullable String field, String errorCode,
@Nullable Object[] errorArgs, @Nullable String defaultMessage);

파라미터 

field : 오류 필드명

errorCode : 오류 코드

errorArgs : 오류 메시지에서 {0} 를 치환하기 위한 값

defaultMessage : 오류 메시지를 찾을 수 없을 때 사용하는 기본 메시지

 

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"

 

ValidationUtils

 

ValidationUtils 사용 전

if (!StringUtils.hasText(item.getItemName())) {
 bindingResult.rejectValue("itemName", "required", "기본: 상품 이름은
필수입니다.");
}

ValidationUtils 사용 후

ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult, "itemName",
"required");

-> rejectValue() 호출

-> MessageCodesResolver 를 사용해서 검증 오류코드로 메시지 코드들을 생성

-> new FieldError() 를 생성하면서 메시지 코드들을 보관

-> th:errors 에서 메시지 코드들로 메시지를 순서대로 메시지에서 찾고, 노출

 

Validator 분리

 

public interface Validator {
boolean supports(Class<?> clazz);			//해당 검증기를 지원하는 여부 확인
void validate(Object target, Errors errors);  //검증 대상 객체와 BindgingResult
}

 

WebDataBinder 를통해서 사용

: 스프링의 파라미터 바인딩의 역할을 해주고 검증 기능도 내부에 포함한다

 

@InitBinder
public void init(WebDataBinder dataBinder) {
 log.info("init binder {}", dataBinder); dataBinder.addValidators(itemValidator);
}

WebDataBinder에 검증기를 추가하면 해당 컨트롤러에서 검증기를 자동으로 적용

@InitBinder -> 해당 컨트롤러에만 영향을 준다

 

사용 전

public String addItemV6(@ModelAttribute Item item, BindingResult 
bindingResult, RedirectAttributes redirectAttributes)

사용 후

public String addItemV6(@Validated @ModelAttribute Item item, BindingResult 
bindingResult, RedirectAttributes redirectAttributes)

 

'Spring' 카테고리의 다른 글

Validation(검증)  (0) 2021.10.07
스프링 통합, 메세지&국제화  (0) 2021.09.30
템플릿  (0) 2021.09.29
타임리프  (0) 2021.09.29
Multi-Thread  (0) 2021.09.08