Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

오류 코드와 메시지 처리 2 본문

인프런/[인프런] 스프링 MVC 2

오류 코드와 메시지 처리 2

Seung__ 2021. 9. 24. 20:30
  • 컨트롤러에서 BindingResult 는 검증해야 할 객체인 target 바로 다음에 온다. 
  • 따라서 BindingResult 는 이미 본인이 검증해야 할 객체인 target 을 알고 있다.
    @PostMapping("/add")
    public String addItemV3(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) {

        log.info("objectName = {}", bindingResult.getObjectName());
        log.info("target = {}", bindingResult.getTarget());
2021-09-24 20:19:16.482  INFO 21476 --- [io-8080-exec-10] h.i.w.v.ValidationItemControllerV2
: objectName = item
2021-09-24 20:19:16.483  INFO 21476 --- [io-8080-exec-10] h.i.w.v.ValidationItemControllerV2
: target = Item(id=null, itemName=123, price=222, quantity=111)

 

1. rejectValue(), reject()


  • BindingResult 가 제공하는 rejectValue() , reject() 를 사용하면 
  • FieldError , ObjectError 를 직접 생성하지 않고, 깔끔하게 검증 오류를 다룰 수 있다.

 

 

2. rejectValue()


void rejectValue(@Nullable String field, String errorCode,
			@Nullable Object[] errorArgs, @Nullable String defaultMessage);
  • field : 오류 필드명
  • errorCode : 오류 코드, 이 오류 코드는 메시지에 등록된 코드가 아니다. 좀 다름.
  • messageResolver를 위한 오류 코드이다.)
  • errorArgs : 오류 메시지에서 {0} 을 치환하기 위한 값
  • defaultMessage : 오류 메시지를 찾을 수 없을 때 사용하는 기본 메시지
  • 사용 예시
    • bindingResult.rejectValue("price", "range", new Object[]{1000, 10000}, null);
  • 앞에서 BindingResult 는 어떤 객체를 대상으로 검증하는지 target을 이미 알고 있음.
  • 따라서 target(item)에 대한 정보는 없어도 된다. 
  • 오류 필드명은 동일하게 price 를 사용했다.

 

 

3. 축약된 오류 코드


  • FieldError() 를 직접 다룰 때는 오류 코드를 range.item.price 와 같이 모두 입력했다. 
  • 그런데 rejectValue() 를 사용하고 부터는 오류 코드를 range 로 간단하게 입력했다. 
  • 그래도 오류 메시지를 잘 찾아서 출력한다. 무언가 규칙이 있는 것 처럼 보인다. 
  • 이 부분을 이해하려면 MessageCodesResolver 를 이해해야 한다. 

 

4. GitHub : 210924 BindingResult, Message


 

GitHub - bsh6463/Validation-V1

Contribute to bsh6463/Validation-V1 development by creating an account on GitHub.

github.com

 

Comments