본문 바로가기
Spring|Spring-boot

[Spring] @InitBinder 애노테이션을 이용한 컨트롤러 범위 Vaildator

by oncerun 2020. 6. 24.
반응형

@InitBinder 애노테이션을 이용하면 커트 롤러 범위 Vaildator를 설정할 수 있다.

 

사전 준비

- @Valid 애노테이션은 Bean Vaidation API에 포함되어있으므로 의존 설정에 모듈 추가를 한다.

		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
		</dependency>

 

그리고 Validator을 상속받아 설정 클래스 하나를 준비한다. 

package com.newlecture.web.service;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class RequsetValidator implements Validator{

	@Override
	public boolean supports(Class<?> clazz) {
		return RequestValidator.class.isAssignableFrom(clazz);
	}

	@Override
	public void validate(Object target, Errors errors) {
		// TODO Auto-generated method stub
		
		ValidationUtils.rejectIfEmpty(errors, "password","required");
	}

	
	
}

 

supports()는 파라미터로 전달받은 clazz객체가 원하는 클래스의 타입으로 변환 가능한지 확인한다.

validate()는 두 개의 파라미터를 갖는다. target 파라미터는 검사 대상의 객체이고 errors 파라미터는 검사 결과 에러 코드를 설정하기 위한 객체이다.

 

1. 검사 대상 객체의 특정 프로퍼티나 상태가 올바른지 검사한다.

2. 올바르지 않다면 Errors의 rejectValue() 메서드를 이용해서 에러코드를 지정한다.

 

여기서 rejectValue() 메서드는  첫 번째 파라미터로 프로퍼티의 이름을 전달받고 두 번째 파라미터로 에러 코드를 전달받는다. JSP 코드에서는 여기서 지정한 에러코드를 이용해 에러 메시지를 출력할 수 있다.

 

ValidationUtils 클래스는 객체의 값 검증 코드를 간결하게 작성할 수 있도록 도와준다.

직접 조건문을 통해 검사하는 것 대신 구현된 메서드를 이용해 간결하게 검사한다.

 

컨트롤러 범위 Validartor는 @Controller에서 @InitBinder 애노테이션으로 구현한다.

 

@InitBinder
	protected void initBinder(WebDataBinder binder) {
		binder.setValidator(new RequsetValidator());
	}

@InitBinder 에노테이션을 적용한 메서드는 WebDataBinder 타입의 파라미터를 갖는데 WebDataBinder#setValidator() 메서드를 이용해 컨트롤러 범위에 적용할 수 있다. 또한 어떤 Validator가 검증할지도 정해줄 수 있다.

 

 

반응형

댓글