- Spring MVC 마스터하기 Validation 52022년 05월 17일
- starryeye
- 작성자
- 2022.05.17.:01
이전 포스팅에서 봤던 검증 로직에서.. BindingResult에
FieldError와 ObjectError를 생성해서 넣는 방식은 너무 파라미터도 많고 힘들다..
BindingResult가 파라미터로 있는 컨트롤러는 위 예시와 같이 검증 대상(Item) 바로 뒤에 위치하게 된다.
그렇다는 말은..
BindingResult는 이미 검증할 대상을 알고 있다는 말이다.
(위 예시에서 bindingResult.getObjectName(), bindingResult.getTarget() 을 사용함에서 알 수 있다.)
<위 예시 출력>
item
item 객체 정보 출력
검증 대상을 이미 알고있기 때문에 좀 더 간단하게 검증 로직을 구현할 수 있다.
rejectValue(), reject()
좀더 간단한 파라미터를 가지는 걸 볼 수 있다.
순서대로 rejectValue는 FieldError, reject는 ObjectError(글로벌에러) 로 대체할 수 있다.
field : 오류가 발생된 필드 명 (검증 대상 객체의 맴버변수)
errorCode : 오류 코드 (messageResolver에서 사용)
errorArgs : 오류 메세지에서 {0} 을 치환 하기 위한 값
defaultMessage : 오류 메세지를 찾을 수 없을 때 사용하는 기본 메세지 코드
<오류 코드 vs 오류 메세지 vs 메세지 코드>
오류 코드 파라미터 : errorCode 파라미터에 입력한 값
오류 코드 : error.properties 에 입력한 문자열(first, key)
오류 메세지 : error.properties 에 입력한 문자열(second, value)
메세지 코드 : 최종적으로 화면에 표시되는 문자열
-> 오류코드 파라미터로 관련한 오류코드가 messageResolver에 의해 생성된다.
<예시>
위 예시를 보면.. errorCode에 "range"로 입력했다.
FieldError 생성때는 해당 파라미터에 "range.item.price"로 입력했다.
다르게 입력했지만 동일한 결과가 나타난다.
이는 MessageCodesResolver를 알아야한다.
<참고>
error.properties 에
required.item.itemName: 상품 이름은 필수 입니다.
required: 필수 값 입니다.
라고 입력해두었을 경우...
위 컨트롤러에서 ItemName 필드에 아무것도 들어오지 않을 경우
"상품 이름은 필수 입니다." 문구가 출력된다.
errorCode 에 "required"로 코딩했는데도 말이다..
-> 구체적인 오류 코드가 우선순위로 매칭되어 출력된다.
MessageCodesResolver
오류 코드 파라미터(errorCode)로 여러 오류코드를 생성한다.
MessageCodesResolver는 인터페이스이다.
DefaultMessageCodesResolver는 기본 구현체이다.
resolverMessageCodes 메서드로 오류 코드들을 생성해주고 있다.
(생성된 순서대로 우선순위로 매칭될 오류 코드라 보면된다.)
파라미터로는 FieldError에 들어갈 파라미터와.. 오류가 발생된 필드의 타입이 들어간다.
-> 사실, rejectValue와 reject 안에서 오류코드들이 만들어지고 각 오류코드와 FieldError, ObjectError가 생성된다.
스프링이 자체적으로 생성하는 FieldError는 메세지코드를 어떻게 바꾸지..?
컨트롤러 내부에서 BindingResult의 reject/rejectValue로 직접 개발자가 FieldError를 생성하게 되는 경우 말고
타입에러일 경우와 같이 스프링이 자체적으로 만드는 FieldError의 경우에 메세지 코드를 어떻게 처리 하는지 에 대해 알아보자.
price 필드에 문자 "A"가 입력 되면...
typeMismatch.item.price
typeMismatch.price
typeMismatch.java.lang.Integer
typeMismatch
4개의 오류 코드가 생성된다.
그러면 error.properties에 위 오류코드에 대해서 처리해주면 끝
'Spring > MVC' 카테고리의 다른 글
Spring MVC 마스터하기 Validation 7 (0) 2022.05.26 Spring MVC 마스터하기 Validation 6 (0) 2022.05.26 Spring MVC 마스터하기 Validation 4 (0) 2022.05.17 Spring MVC 마스터하기 Validation 3 (0) 2022.05.08 Spring MVC 마스터하기 Validation 2 (0) 2022.05.08 다음글이전글이전 글이 없습니다.댓글