spring

MessageCodesResolver..BindingResult의 reject,rejectvalue내부

finite라이프 2024. 4. 20. 22:33

MessageCodesResolver CodesResolver = new DefaultMessageCodesResolver();

resolveMessageCodes의 파라미터

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번을 찾느다.