오류 코드를 만들 때 아래와 같이 자세히 만들 수 있고
required.item.itemName = 상품 이름은 필수입니다.
아래와 같이 단순하게 만들 수도 있다.
required = 필수 값입니다.
단순하게 만들면 범용성이 좋아 여러곳에서 사용할 수 있지만, 메시지를 세밀하게 작성하기 어렵다.
반대로 너무 자세하게 만들면 범용성이 떨어진다.
가장 좋은 방법 : 범용성으로 사용하다가 세밀하게 작성해야할 경우에는 세밀한 내용이 적용되도록 한다.
위의 코드처럼 객체명과 필드명을 조합한 세밀한 메세지가 있는지 우선 확인하고, 없으면 범용성있는 메세지를 출력하게 하면된다.
이러한 기능을 MessageCodesResolver에서 이미 해주고 있다.
errorCode + obejctName + fieldName
errorCode + fieldName
errorCode + fieldType
errorCode
MessageCodesResolver는 위와 같이 세밀한 메시지부터 범용성 메시지까지 순차적으로 만들어준다.
messageCode = required.item
messageCode = required
messageCode = required.item.itemName
messageCode = required.itemName
messageCode = required.java.lang.String
messageCode = required
예를들어
bindingResult.rejectValue("itemName", "required") 함수 실행 시 rejectValue()에서 codesResolver를 호출하여 messageCodes를 얻고 new FieldError("item", "itemName", null, false, messageCodes, null,null); 를 만든다.
MessageCodeResolver 정리
- 검증 오류 코드로 메시지 코드들을 생성한다.
- 'MessageCodeReolover' 인터페이스고 'DefaultMessageCodesResolver'는 기본 구현체이다.
- 주로 ObejectError,FieldError와 함께 사용
객체 오류의 경우 다음 순서로 2가지 생성
- code + "." + object name
- code
필드 오류의 경우 다음 순서로 4가지 메세지 코드 생성
- code + "." + object name + '.' + field
- code + "." + field
- code + "." + field type
- code