• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring MVC 마스터하기 Validation 5
        2022년 05월 17일
        • starryeye
        • 작성자
        • 2022.05.17.:01
        반응형

         

        이전 포스팅에서 봤던 검증 로직에서.. BindingResult에 

        FieldError와 ObjectError를 생성해서 넣는 방식은 너무 파라미터도 많고 힘들다..

         

        BindingResult가 파라미터로 있는 컨트롤러는 위 예시와 같이 검증 대상(Item) 바로 뒤에 위치하게 된다.

         

        그렇다는 말은.. 

        BindingResult는 이미 검증할 대상을 알고 있다는 말이다.

        (위 예시에서 bindingResult.getObjectName(), bindingResult.getTarget() 을 사용함에서 알 수 있다.)

         

        <위 예시 출력>

        item

        item 객체 정보 출력

         

         

        검증 대상을 이미 알고있기 때문에 좀 더 간단하게 검증 로직을 구현할 수 있다.

         

        rejectValue(), reject()

         

        좀더 간단한 파라미터를 가지는 걸 볼 수 있다.

        순서대로 rejectValue는 FieldError, reject는 ObjectError(글로벌에러) 로 대체할 수 있다.

        field : 오류가 발생된 필드 명 (검증 대상 객체의 맴버변수)

        errorCode : 오류 코드 (messageResolver에서 사용)

        errorArgs : 오류 메세지에서 {0} 을 치환 하기 위한 값

        defaultMessage : 오류 메세지를 찾을 수 없을 때 사용하는 기본 메세지 코드

         

        <오류 코드 vs 오류 메세지 vs 메세지 코드>

        오류 코드 파라미터 : errorCode 파라미터에 입력한 값

        오류 코드 :  error.properties 에 입력한 문자열(first, key)

        오류 메세지 : error.properties 에 입력한 문자열(second, value)

        메세지 코드 : 최종적으로 화면에 표시되는 문자열

        -> 오류코드 파라미터로 관련한 오류코드가 messageResolver에 의해 생성된다.

         

         

        <예시>

        위 예시를 보면.. errorCode에 "range"로 입력했다.

        FieldError 생성때는 해당 파라미터에  "range.item.price"로 입력했다.

        다르게 입력했지만 동일한 결과가 나타난다.

         

        이는 MessageCodesResolver를 알아야한다.

         

        <참고>

        error.properties 에

         

        required.item.itemName: 상품 이름은 필수 입니다.

        required: 필수 값 입니다.

         

        라고 입력해두었을 경우...

        위 컨트롤러에서 ItemName 필드에 아무것도 들어오지 않을 경우 

        "상품 이름은 필수 입니다." 문구가 출력된다.

        errorCode 에 "required"로 코딩했는데도 말이다..

        -> 구체적인 오류 코드가 우선순위로 매칭되어 출력된다.

         

         

        MessageCodesResolver

        오류 코드 파라미터(errorCode)로 여러 오류코드를 생성한다.

         

        MessageCodesResolver는 인터페이스이다.

        DefaultMessageCodesResolver는 기본 구현체이다.

         

        resolverMessageCodes 메서드로 오류 코드들을 생성해주고 있다.

        (생성된 순서대로 우선순위로 매칭될 오류 코드라 보면된다.)

        파라미터로는 FieldError에 들어갈 파라미터와.. 오류가 발생된 필드의 타입이 들어간다.

         

        -> 사실, rejectValue와 reject 안에서 오류코드들이 만들어지고 각 오류코드와 FieldError, ObjectError가 생성된다.

         

         

        스프링이 자체적으로 생성하는 FieldError는 메세지코드를 어떻게 바꾸지..?

        컨트롤러 내부에서 BindingResult의 reject/rejectValue로 직접 개발자가 FieldError를 생성하게 되는 경우 말고

        타입에러일 경우와 같이 스프링이 자체적으로 만드는 FieldError의 경우에 메세지 코드를 어떻게 처리 하는지 에 대해 알아보자.

         

        price 필드에 문자 "A"가 입력 되면...

        typeMismatch.item.price

        typeMismatch.price

        typeMismatch.java.lang.Integer

        typeMismatch

        4개의 오류 코드가 생성된다.

         

        그러면 error.properties에 위 오류코드에 대해서 처리해주면 끝

        반응형

        'Spring > MVC' 카테고리의 다른 글

        Spring MVC 마스터하기 Validation 7  (0) 2022.05.26
        Spring MVC 마스터하기 Validation 6  (0) 2022.05.26
        Spring MVC 마스터하기 Validation 4  (0) 2022.05.17
        Spring MVC 마스터하기 Validation 3  (0) 2022.05.08
        Spring MVC 마스터하기 Validation 2  (0) 2022.05.08
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바