와 같이 자세히 만들수도 있으며,
라고 만들 수 있다.
단순하게 만들경우 범용성이 좋아 여러곳에서 사용이 가능하지만 메시지를 세밀하기 작성하기 어려움.
너무 자세하게 만들경우 범용성이 떨어짐.
이게 가능하도록하는 방법은 메시지의 우선순위를 두는 것이다.
위의 방법이 가능한 이유는 스프링이 MessageCodesResolver라는 것으로 이러한 기능을 지원함.
객체 오류의 경우
다음 순서로 2가지 생성
1 : code + "." + object name
2 : code
예시) 오류코드 : required , object name : item
1 : required.item
2 : item
필드 오류 의 경우
다음 순서로 4가지 코드 생성
1 : code + "." + object name + "." + field
2 : code + "." + field
3 : code + "." + field type
4 : code
예시) 오류코드 : typeMisMatch, obejct name : "user" , field "age" , field type: int
1. "typeMisMatch.user.age"
2. "typeMisMatch.age"
3. "typeMisMatch.int"
4. "typeMisMatch"
전략에 따라서 properties를 수정하자.
#required.item.itemName=상품 이름은 필수입니다.
#range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
#max.item.quantity=수량은 최대 {0} 까지 허용합니다.
#totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}
#==ObjectError==
#Level1
totalPriceMin.item=상품의 가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}
#Level2 - 생략
totalPriceMin=전체 가격은 {0}원 이상이어야 합니다. 현재 값 = {1}
#==FieldError==
#Level1
required.item.itemName=상품 이름은 필수입니다.
range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
max.item.quantity=수량은 최대 {0} 까지 허용합니다.
#Level2 - 생략
#Level3
required.java.lang.String = 필수 문자입니다.
required.java.lang.Integer = 필수 숫자입니다.
min.java.lang.String = {0} 이상의 문자를 입력해주세요.
min.java.lang.Integer = {0} 이상의 숫자를 입력해주세요.
range.java.lang.String = {0} ~ {1} 까지의 문자를 입력해주세요.
range.java.lang.Integer = {0} ~ {1} 까지의 숫자를 입력해주세요.
max.java.lang.String = {0} 까지의 문자를 허용합니다.
max.java.lang.Integer = {0} 까지의 숫자를 허용합니다.
#Level4
required = 필수 값 입니다.
min= {0} 이상이어야 합니다.
range= {0} ~ {1} 범위를 허용합니다.
max= {0} 까지 허용합니다.
ValidationUtils.rejectIfEmpty(Errors e,String field,String errorCode);
ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult,"itemName","required");