오봉이와 함께하는 개발 블로그
스프링 MVC 2 - Bean Validation 에러 코드, 오브젝트 오류 본문
Bean Validation - 에러 코드
Bean Validation이 기본으로 제공하는 오류 메시지를 좀 더 자세히 변경하고 싶다.
그럼 먼저 Bean Validation을 적용하고 bindingResult에 등록된 검증 오류 코드를 보자.NotBlank.item.itemName,NotBlank.itemName,NotBlank.java.lang.String,NotBlank
오류 코드가 어노테이션 이름으로 등록된다. 마치 typeMismatch와 유사하다.
NotBlank라는 오류 코드를 기반으로 MessageCodesResolver를 통해 다양한 메시지 코드가 순서대로
생성된다.
@NotBlank
- NotBlank.item.itemName
- NotBlank.itemName
- NotBlank.java.lang.String
- NotBlank
@Range
- Range.item.price
- Range.price
- Range.java.lang.Integer
- Range
메시지 등록
errors.properties
#Bean Validation 추가
NotBlank={0} 공백X
Range={0}, {2} ~ {1} 허용
Max={0}, 최대 {1}
{0}
은 필드명이고, {1}
, {2}
...은 각 어노테이션 마다 다르다.
실행해보면 등록한 메시지가 정상 적용되는 것을 확인할 수 있다.
BeanValidation 메시지 찾는 순서
- 생성된 메시지 코드 순서대로 messageSource에서 메시지 찾기
- 어노테이션의 message 속성 사용 -> @NotBlank(message = "공백! {0}")
- 라이브러리가 제공하는 기본 값 사용 -> 공백일 수 없습니다.
어노테이션의 message 사용 예
@NotBlank(message = "공백은 입력할 수 없습니다.")
private String itemName;
Bean Validation - 오브젝트 오류
Bean Validation에서 특정 필드(FieldError
)가 아닌 해당 오브젝트 관련 오류(ObjectError
)는 어떻게 처리할 수 있을까?@ScriptAssert()
를 사용하면 된다.
@Data
@ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000")
public class Item {
//...
}
실행해보면 정상 수행되는 것을 확인할 수 있으며 메시지 코드도 다음과 같이 생성된다.
- ScriptAssert.item
- ScriptAssert
그런데 실제 사용해보면 제약이 많고 복잡하다.
그리고 실무에서는 검증 기능이 해당 객체의 범위를 넘어서는 경우들도 종종 등장하는데, 그런 경우 대응이 어렵다.
따라서 오브젝트 오류(글로벌 오류)의 경우 @ScriptAssert
를 억지로 사용하는 것 보다는 오브젝트 오류 관련 부분만 직접 자바 코드로 작성하는 것을 권장한다.
@ScriptAssert
제거
if (item.getPrice() != null && item.getQuantity() != null) {
int resultPrice = item.getPrice() * item.getQuantity();
if (resultPrice < 10000) {
bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null);
}
}
출처 : 인프런 김영한 지식공유자님 강의 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
'BE > Spring' 카테고리의 다른 글
스프링 MVC 2 - Form 전송 객체 분리 소개와 개발 (0) | 2022.08.25 |
---|---|
스프링 MVC 2 - BeanValidation 한계, groups (0) | 2022.08.24 |
스프링 MVC 2 - Bean Validator 스프링 적용 (0) | 2022.08.24 |
스프링 MVC 2 - Bean Validation 소개, 시작 (0) | 2022.08.24 |
스프링 MVC 2 - Validator 분리 (0) | 2022.08.23 |