만약 특정 controller를 공통화 하고 그 controller를 확장하여 확장된 도메인을 modelAttribute로 사용하고 싶은 경우가 발생하지만 이런 경우 validation 처리에 대해 확장 처리가 힘들다.
이럴 땐 method 내에서 validation 체크를 별도로 해야하는데 스프링이 제공하는 custom validator를 구현하는 것은 너무 개발 비용이 많이 드는 것 같아 기존 어노테이션 방식을 그대로 사용하는 형태의 유틸을 만들어 보았다.
import org.springframework.util.StringUtils;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.BindException;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import lombok.Setter;
import lombok.SneakyThrows;
/**
* annotation 기반 validation 체크를 지원하는 유틸
* @author bluesky
*
*/
public class ValidationUtil {
@Setter
private static Validator validator;
@SneakyThrows
public static void validate(Object object, Object... validationHints) {
BeanPropertyBindingResult beanPropertyBindingResult = new BeanPropertyBindingResult(object, StringUtils.uncapitalize(object.getClass().getSimpleName()));
ValidationUtils.invokeValidator(validator, object, beanPropertyBindingResult, validationHints);
if (beanPropertyBindingResult.hasErrors()) {
throw new BindException(beanPropertyBindingResult);
}
}
}
위의 유틸을 사용하여 validation 체크를 하는 방법은 다음과 같다.
ValidationUtil.validate(testObject, TestObjectValidate.class);
댓글 없음:
댓글 쓰기