[Spring] BindingResult

hi·2022년 12월 2일
  • 스프링이 제공하는 검증 오류를 보관하는 객체
  • 검증할 대상 바로 다음에 위치
    (즉 target을 알고 있음)
  • Model에 자동으로 포함됨
  • 인터페이스이며 Errors 인터페이스를 상속
    Errors : 단순한 오류 저장과 조회 기능 제공

필드 오류 FieldError

필드에 오류가 있으면 FieldError 객체를 생성하여 bindingResult 에 담아둔다

if (!StringUtils.hasText(item.getItemName())) {
 bindingResult.addError(new FieldError("item", "itemName", "상품 이름은
필수입니다."));
}

글로벌 오류 ObjectError

특정 필드를 넘어서는 오류가 있으면 ObjectError 객체를 생성해서 bindingResult 에 담아둔다

bindingResult.addError(new ObjectError("item", "가격 * 수량의 합은 10,000원 이상이어야
						합니다. 현재 값 = " + resultPrice));

타임리프 스프링 검증 오류 통합 기능

#fields : BindingResult가 제공하는 검증 오류에 접근

<div th:if="${#fields.hasGlobalErrors()}">
	<p class="field-error" th:each="err : ${#fields.globalErrors()}" th:text="${err}">
    글로벌 오류 메시지
    </p>
</div>

th:errors : 해당 필드에 오류가 있으면 태그 출력, th:if 의 편의 버전
th:errorclass : th:field 에서 지정한 필드에 오류가 있으면 class명 추가

<div>
	<label for="itemName" th:text="#{label.item.itemName}">상품명</label>
	<input type="text" id="itemName" th:field="*{itemName}"
		   th:errorclass="field-error" 
           class="form-control" placeholder="이름을 입력하세요">
	<div class="field-error" th:errors="*{itemName}">상품명 오류</div>
</div>

th:field : 오류 발생시 FieldError에서 보관한 값을 출력

th:field="*{price}"

공식 매뉴얼 https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html#validation-and-error-messages

rejuctValue( ) , reject( )

bindingResult.rejectValue("price", "range", new Object[]{1000, 1000000}, null)
  • 축약된 코드로 오류 메시지를 찾아 출력

오류 코드 자동 생성 MessageCodesResolver

  • 구체적인 것을 먼저, 덜 구체적인 것을 가장 나중에 생성

  • FieldError rejectValue("itemName", "required")
    required.item.itemName
    required.itemName
    required.java.lang.String
    required

  • ObjectError reject("totalPriceMin")
    totalPriceMin.item
    totalPriceMin

0개의 댓글