쌓고 쌓다
BindingResult rejectValue(), reject() 본문
앞서 작성한 bindingResult를 보자.
bindingResult.addError(new ObjectError("poster", null, null, "조건: 키와 몸무게 합은 150이상."));
ObjectError 객체를 생성하는데 번거로움이 있다.
이것을 더 간략히 해보자.
BindingResult 파라미터의 위치는 @ModelAttribute 뒤에 위치한다.
그러므로 앞서 작성한 ObjectError 객체 생성에 objectName인 "poster"를 작성할 필요가 있을까?
그렇다. BindingResult는 검증할 객체를 알고 있다.
log.info("objectName={}", bindingResult.getObjectName());
log.info("target={}", bindingResult.getTarget());
로그를 찍어서 확인할 수 있다.
rejectValue(), reject()
rejectValue, reject 메서드를 사용하여 FieldError, ObjectError를 직접 생성하지 않고도 검증이 가능하다.
사용 코드를 보자.
@PostMapping("/add")
public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult) {
if(!StringUtils.hasText(item.getItemName())) {
bindingResult.rejectValue("itemName", "required");
}
if(resultPrice<10000) {
bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null);
}
}
에러 메시지 코드를 관리하는 errors.properties에 존재하는 키 값(에러 코드)을 입력하지 않았는데 동작이 된다.
- rejectValue: 필드 에러 ( 에러 필드("itemName"), 에러 코드("itemName")를 작성함 )
- reject: 글로벌 에러 ( 에러 코드("totalPriceMin")만 작성하고, 필드를 지정하지 않음 )
errros.properties
required.item.itemName=상품 이름은 필수입니다.
range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
max.item.quantity=수량은 최대 {0} 까지 허용합니다.
totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}
errors.properties의 작성 규칙을 보면 답이 있다.
"에러 코드.에러 객체.에러 필드" 순서이다.
글로벌 에러는 에러 코드만 작성한다.
'프로그래밍 > spring' 카테고리의 다른 글
Invalid target for Validator 에러 고찰 (0) | 2023.08.31 |
---|---|
properties의 한글 값 ??로 출력되는 문제 해결방법 (0) | 2023.08.30 |
MessageCodesResolver (0) | 2023.08.30 |
[스프링 부트] BindingResult 메시지 properties 관리 (0) | 2023.08.29 |
[스프링 부트] BindingResult 사용 - 25 (0) | 2023.08.29 |
Comments