우당탕탕 개발자 되기
Validation(검증) 본문
상품 정보 입력 검증
검증 직접 처리
- 검증 오류 보관
Map<String,String> errors = new HashMap<>(); //오류 발생시 어떤 검증에서 오류가 발생했는지 정보를 담아둔다.
어떤 필드에서 오류가 발생 했는지 구분하기 위해 오류가 발생한 필드명을 key 로 사용
-> 검증 오류 발생 시 입력 폼을 다시 보여준다.
-> 검증 오류들을 고객에게 친절하게 안내해서 다시 입력할수 있게 한다.
-> 검증 오류가 발생해도 고객이 입력한 데이터가 유지
BindingResultV1

BindingResult bindingResult 파라미터를 추가 해준다
FieldError 생성자 요약
public FieldError(String objectName,String field, String defaultMessage){]
- 필드에 오류가 있으면 FieldError 객체를 생성해서 bindingResult 에 담아둔다.
- objectName: @ModelAttribute 이름
- filed: 오류가 발생한 필드 이름
- defaultMessage : 오류 기본 메시지
ObjectError 생성자 요약
public ObjectError(String objectName, String defaultMessage) {}
- 특정 필드를 넘어서는 오류가 있으면 ObjectError 객체를 생성해서 bindingResult 에 담아두면 된다
- objectName : @ModelAttribute 의 이름
- defaultMessage : 오류 기본 메시지
타임리프 스프링 검증 오류 통합 기능
타임리프는 스프링의 BindingResult 를 활용해서 편리하게 검증 오류를 표현하는 기능을 제공한다.
#fields : #fields 로 BindingResult 가 제공하는 검증 오류에 접근할 수 있다.
th:errors : 해당 필드에 오류가 있는 경우에 태그를 출력한다. th:if 의 편의 버전이다.
th:errorclass : th:field 에서 지정한 필드에 오류가 있으면 class 정보를 추가한다
BindingResultV2
@ModelAttribute에 바인딩 시 타입 오류가 발생하면?
- BindingResult 가 없으면 400 오류가 발생하면서 컨트롤러가 호출되지 않고, 오류 페이지로
이동한다.
- BindingResult 가 있으면 오류 정보( FieldError )를 BindingResult 에 담아서 컨트롤러를
정상 호출한다
BindingResult에 검증 오류를 적용하는 3가지 방법
- @ModelAttribute 의 객체에 타입 오류 등으로 바인딩이 실패하는 경우 스프링이 FieldError 생성해서 BindingResult 에 넣어준다
- 개발자가 직접 넣어준다
- Validator 사용
-> BindingResult , FieldError , ObjectError 를 사용해서 오류 메시지를 처리하는 방법을 사용하였지만 고객이 입력한 내용이 모두사라졌다.
입력 내용 유지 방법
: 입력 데이터가 컨트롤러의 @ModelAttribute에 바인딩 되는 시점에 오류가 발생하면 모델객체에 사용자 입력 값을 유지하기 어렵다. 다른 타입의 값이 들어오면 문자를 보관할수 있는 방법이 없기때문이다.
-> 따라서 오류 발생시 입력 값을 보관하는 별도의 방법을 사용해 화면에 출력하면된다.
FieldError가 오류 발생시 사용자 입력 값을 저장하는 기능을 제공한다.
타입오류로 바인딩 실패시 스프링은 FieldError를 생성해 사용자가 입력한 값을 넣어둬서 타입오류같은 실패에도 사용자 오류 메시지를 출력할수 있다.
FieldError 생성자
public FieldError(String objectName, String field, String defaultMessage);
public FieldError(String objectName, String field, @Nullable Object
rejectedValue, boolean bindingFailure, @Nullable String[] codes, @Nullable
Object[] arguments, @Nullable String defaultMessage)
파라미터 목록
- objectName : 오류가 발생한 객체 이름
- field : 오류 필드
- rejectedValue : 사용자가 입력한 값(거절된 값)
- bindingFailure : 타입 오류 같은 바인딩 실패인지, 검증 실패인지 구분 값
- codes : 메시지 코드
- arguments : 메시지에서 사용하는 인자
- defaultMessage : 기본 오류 메시지
'Spring' 카테고리의 다른 글
| 오류 코드 메시지 처리 (0) | 2021.10.07 |
|---|---|
| 스프링 통합, 메세지&국제화 (0) | 2021.09.30 |
| 템플릿 (0) | 2021.09.29 |
| 타임리프 (0) | 2021.09.29 |
| Multi-Thread (0) | 2021.09.08 |