1. BindingResult의 rejectValue(), reject() 기능
BindingResult가 제공하는 rejectValue(), reject()를 사용하면,
FieldError, ObjectError를 직접 생성하지 않고, 깔끔하게 검증 오류를 다룰 수 있다.
bindingResult.addError(new FieldError("item", "price", item.getPrice(), false, new String[]{"range.item.price"}, new Object[]{1000, 1000000}, null));
이 코드를
bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null);
이렇게 간단하게 나타낼 수 있다.
괄호 안에 required는 required.item.itemName의 첫글자만 따온것
필드에러가 아니고, 글로벌 에러일 경우에는 reject()를 사용
bindingResult.reject("totalPriceMin");
2. MessageCodesResolver
하지만 궁금한점이 있는데, 어떻게 첫글자만 입력해서 properties의 내용을 가져올까?
그리고 properties에 정의할 때, 저렇게 디테일하게 정의할 필요가 있을까?
두번째 물음에 대한 답은 범용성 관련한 부분에 있다.
단순하게 만들면 범용성이 좋아 여러곳에서 사용할 수 있지만, 메세지를 세밀하게 작성하기 어렵다.
반대로 너무 자세하게 만들면 범용성이 떨어진다.
따라서 가장 좋은 방법은 범용성으로 사용하다가, 세밀하게 작성해야 하는 경우에는 세밀한 내용이 적용되도록 메세지에 단계를 두는 방법이다.
required.item.itemName과 같이 객체명과 필드명을 조합한 세밀한 메시지 코드가 있으면 이 메세지를 높은 우선순위로 두고, 없으면 좀 더 범용적인 메세지를 선택하도록 잘 개발하는게 중요한데
스프링은 'MessageCodesResolver'라는 것으로 이러한 기능을 지원한다.
이것은 다음 글에서 알아보자.
'Languages | Frameworks > Spring' 카테고리의 다른 글
ValidationUtils (0) | 2022.03.21 |
---|---|
MessageCodesResolver - 메세지 우선순위 설정 (0) | 2022.03.21 |
BindingResult -2 (0) | 2022.03.21 |
BindingResult(error 출력시 유용) -1 (0) | 2022.03.21 |
@ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리, 통합하기(Spring에서 예외 관리하는 방법, 실무에서는 어떻게?) (0) | 2021.12.30 |