2018년 2월 1일 목요일

ValidationUtil 만들기 - static method로 @Validated 처리하기

Spring mvc를 사용하면 controller 의 method argument로 넘어오는 modelAttribute에 대한 Validated 처리를 할 수 있다.

만약 특정 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);

댓글 없음:

댓글 쓰기