금융에 대한 모든 것

유효성 검사

 웹 애플리케이션을 사용하는 사람이 회원가입을 하기 위해서는 정해진 양식의 값을 입력해야 합니다. 하지만 그 값이 잘못될 수 있기 때문에 유효성 검사를 통해 잘못된 값을 사용자에게 알려주어야 합니다. 그렇다면 아래의 커맨드 객체에 대해 유효성 검사를 하기 위해 Validator를 적용해보겠습니다.

 

MemberVO.java

public class MemberVO {
        
    private String userId;
    private String userPassword;
    private String userEmail;
            ...
}

 

 

Validator, Errors 

 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 속성으로 에러를 냅니다.

 

MemberVaildator 실행

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에 에러 여부를 판별하여 유효성 검사를 통과하지 못했을 때의 로직을 작성합니다.

반응형