Validator클래스를 통해 유효성 검사를 할 경우 데이터베이스(디비) 접근을 통해 값을 비교해야 되는 경우가 있다. 이런 경우 커스텀 어노테이션을 통해 ConstraintValidator인터페이스를 구현하여 VO객체에 특정 변수 또는 클래스에 직접 선언하여 유효성 검사하는 방법도 있지만 Validator에서 직접 Service클래스를 의존성 주입을 하여 디비에 접근 후 유효성 검사를 하는 방법도 있다. 하지만 필드 주입으로 의존성 주입을 하면 Service클래스에서 java.lang.NullPointerException 에러를 반환하면서 동작이 제대로 되지 않는다. 그래서 생성자 주입을 이용하면 정상적으로 동작하는 것을 볼 수 있다.
controller클래스
@Resource(name = "homeService") private HomeService homeService; @RequestMapping(value = "/form/process", method = RequestMethod.POST) public String formProcess(@Valid HomeVO homeVO, BindingResult bindingResult) throws Exception { new MgmtBbsConfigValidator(homeService).validate(homeVO, bindingResult); if (bindingResult.hasErrors()) { return "form"; } return "redirect:/"; }
Validator클래스
public class HomeValidator implements Validator { private final HomeServcie homeServcie; public HomeValidator(HomeServcie homeServcie) { this.homeServcie = homeServcie; } @Override public boolean supports(Class<?> clazz) { return HomeVO.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { HomeVO homeVO = (HomeVO) target; if (homeServcie.isExistId(homeVO.getId())) { errors.rejectValue("id", "중복오류", "이미 존재하는 아이디입니다."); } } }
'SPRING' 카테고리의 다른 글
interceptor(인터셉터) 나 void타입인 method에서 redirect, forward 하는 방법 (0) | 2021.10.13 |
---|---|
lombok 사용 시 두번째 단어 대문자 일 경우 EL 표현식에서 객체 접근 시 javax.el.PropertyNotFoundException일 경우 (0) | 2020.05.17 |
마이바티스(Mybatis)연동하기 (0) | 2020.05.07 |
스프링 프로젝트 생성방법 (0) | 2020.05.03 |
이클립스 톰캣 연동 (0) | 2020.05.01 |
댓글