MessageCodesResolver..BindingResult의 reject,rejectvalue내부
MessageCodesResolver CodesResolver = new DefaultMessageCodesResolver();
bindingResult.reject("required","item") <- 오브젝트 에러
내부적으로 new ObjectError 생성한다.
String[] messageCodes = codeResolver.resolveMessageCodes("required","item");
For (String messageCode : messageCodes) {
System.out.println("messageCode = " + messageCode);
} // 코드리졸버가 ObjectErorr생성자의 파라미터중 하나인 codes에 들어갈 String 배열을 생성해서 ObjectError의 생성자에 넣어주고 있는 것을 확인 할 수 있다.
required.item
required
bindingResult.rejectValue("itemName","required); <- 필드 에러. 마찬가지로 내부적으로 FieldError를 생성해 bindingResult에 넣어주고 있다.
new FieldError("item","itemName",null,false,messageCodes,null,null);
^ ^ ^ ^ ^ ^
messageCode = required.item.itemName
messageCode = required.itemName
messageCode = required.java.lang.String
messageCode = required
이 값들이 배열로 messageCodes에 들어간다.
메시지리졸버는 위의 순서대로 메시지를 생성한다.
검증에 실패해 에러가 발생하면 MessageSource에서 순서대로 메시지를 찾는다. 메시지에 1번이 없으면 2번을 찾고, 2번이 없으면 3번을 찾느다.