[Spring] Spring 검증 기능1 (BindingResult, Validator)
1. BindingResult
- 스프링이 제공하는 검증 오류를 보관하는 객체
Errors
인터페이스를 상속받는 인터페이스
Errors
: 단순한 오류 저장과 조회 기능
BindingResult
: Errors
+ 추가 기능(ex) addError())
- 오류가 발생하면 사용자가 입력한 값을 담아주는 역할도 가능
- 오류를 확인할 파라미터 뒤에 써주면 자동적으로 아래와 같은 일들을 해줌
- 특정 필드에 오류가 발생하면
FieldError
객체를 생성해서 BindingResult에 자동으로 담아 줌
- 특정 필드를 넘어서는 오류가 발생하면
ObjectError
객체를 생성해서 BindingResult에 자동으로 담아 줌
@ModelAttribute
를 사용하여 데이터를 바인딩할 때 오류가 발생해도 컨트롤러를 호출 해줌
1.1 사용법
-
void rejectValue(@Nullable String field, String errorCode,
@Nullable Object[] errorArgs, @Nullable String defaultMessage);
field
: 오류 필드명
errorCode
: messageResolver를 위한 코드 → ex) 404 (x)
errorArgs
: 오류 메시지에서 중괄호({0})를 치환하기 위한 값
defaultMessage
: 오류 메시지를 찾을 수 없을 때 사용하는 기본 메시지
-
void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage);
1.2 ValidationUtils
- Empty나 공백 같은 경우에 ValidationUtils를 사용하여 더 간단히 표현 가능
-
public static void rejectIfEmpty(Errors errors, String field, String errorCode,
@Nullable Object[] errorArgs, @Nullable String defaultMessage)
-
public static void rejectIfEmptyOrWhitespace(Errors errors, String field,
String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage)
2. Validator
2.1 사용법
- 의존성을 주입받아서
validate()
메서드를 사용하여 검증
- 컨트롤러 내에 WebDataBinder를 추가해서 사용
@InitBinder // 선언된 컨트롤러 내에서만 적용
public void init(WebDataBinder dataBinder) {
dataBinder.addValidators(itemValidator);
}
- 위와 같이 선언을 한 후 검증할 객체 앞에
@Validated
를 붙혀서 사용
- 글로벌 설정을 한 후
@Validated
사용
Application
실행하는 클래스에서 WebConfigurer를 구현 후 getValidator()
메소드를 오바라이딩하여 사용
※ 참고