웹 애플리케이션을 사용하는 사람이 회원가입을 하기 위해서는 정해진 양식의 값을 입력해야 합니다. 하지만 그 값이 잘못될 수 있기 때문에 유효성 검사를 통해 잘못된 값을 사용자에게 알려주어야 합니다. 그렇다면 아래의 커맨드 객체에 대해 유효성 검사를 하기 위해 Validator를 적용해보겠습니다.
MemberVO.java
public class MemberVO {
private String userId;
private String userPassword;
private String userEmail;
...
}
Vaildator는 객체의 값을 검증 할 때 사용하는 인터페이스이고, Errors는 검증 결과를 전송하는 클래스입니다.
Validator 상속
public class A implements Validator {
@Override
public boolean supports(Class<?> clazz) {
}
@Override
public void validate(Object target, Errors errors) {
}
}
먼저 Validator 인터페이스를 구현한 하나의 클래스를 만듭니다. 그리고 supports, validate 메서드를 재정의합니다. supports 메서드는 Validator가 검증할 수 있는 타입인지를 확인하는 역할을 합니다. 또한 validate 메서드의 첫 번째 파라미터는 검증할 객체를 나타냅니다.
public class MemberVaildator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return MemberVO.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
MemberVO memberVO = (MemberVO) target;
if (memberVO.getUserId() == null || memberVO.getUserId().length()<10) {
errors.rejectValue("userId", "required");
}
}
}
supports 메서드의 내용은 검증객체.class.isAssignableFrom(clazz) 형태로 작성하며 해당 객체가 검증할 수 있는 타입인지를 확인하고 리턴합니다. 그 다음 validate 메서드에서 if문을 사용하여 조건을 만족할 경우 Errors의 rejectValue 메서드로 userId필드에 required 속성으로 에러를 냅니다.
MemberController.java
@Controller
public class MemberController {
public String MemberInit(@ModelAttribute MemberVO memberVO, BindingResult bindingResult) {
new MemeberValidator().validate(memberVO, bindingResult);
if(bindingResult.hasErrors()){ //validator에 에러가 있으면,
return "login"; //이 페이지로 이동.
}
}
}
컨트롤러 메서드에 BindingResult를 매개변수로 받고 validator의 전달인자로 검증할 객체와 bindingResult를 전달합니다. 그 다음 if문의 조건으로 hasError 메서드로 validator에 에러 여부를 판별하여 유효성 검사를 통과하지 못했을 때의 로직을 작성합니다.
[Spring] 스프링 인터셉터 구현하기 (1) | 2020.12.11 |
---|---|
[Spring] 스프링 AOP로 로그 수집하기 (0) | 2020.12.11 |
[Spring] 스프링 프로젝트의 기본 구조와 메이븐 (0) | 2020.12.11 |
[Spring] Bean Validation(JSR-303) 으로 객체 값 검증하기 (0) | 2020.12.11 |
[Spring] 스프링 프로젝트 만들기 (0) | 2020.12.11 |