ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Validator
    웹페이지 제작을 위한 스프링공부 2020. 5. 12. 18:43

    JSR-303, JSR-380 스펙을 이용한 유효성 검사 방법을 학습함.

     

    지금까지는 유효성 검사를 하기위해 Hibernate를 사용하였습니다.

     

    이번에는 Validator 를 직접 만들어 보도록 하겠습니다.

     

    JSR-303 , JSR-380 스펙으로 유효성 검사를 한 후 추가적으로 다른 유효성 검사를 하고자 할 때 사용합니다.

     

     

     

    validator 인터페이스 구현

     

    먼저 validator인터페이스를 구현합니다

     

    supports : 유효성 검사할 데이터를 가지고 있는 객체가 유효성 검사가 가능한지 확인합니다.(구현되있음)

     

    validate : 유효성 검사를 하는 메서드

     

    package kr.co.softcampus.validator;
    
    import org.springframework.validation.Errors;
    import org.springframework.validation.ValidationUtils;
    import org.springframework.validation.Validator;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.support.WebBindingInitializer;
    
    import kr.co.softcampus.beans.DataBean1;
    
    public class DataBean1Validator implements Validator{
    
    	@Override
    	public boolean supports(Class<?> clazz) {//해당 클래스가 유효성 검사가 가능한지 검사
    		// TODO Auto-generated method stub
    		return DataBean1.class.isAssignableFrom(clazz);
    	}
    
    	@Override
    	public void validate(Object target, Errors errors) {//유효성 검사를 하는곳 @valid가 붙어져있는 dataBean1의 주솟값이 target매개변수로 들어옴
    		// TODO Auto-generated method stub
    		
    		
    	}
    	
    
    }

     

     

    validator를 컨트롤러에서 등록

     

    validator를 컨트롤러에서 등록해줍니다

     

    사용할 validator가 하나면 setValidator, 한 개 이상이면 addValidators메서드를 사용합니다

     

    @PostMapping("/input_pro")
    	public String input_pro(@Valid DataBean1 dataBean1,BindingResult result) {
    		
    		if(result.hasErrors()) {
    			return "input_data";
    		}
    		
    			return "input_success";
    	}
    	@InitBinder
    	protected void initBinder(WebDataBinder binder)
    	{
    		DataBean1Validator validator1 = new DataBean1Validator();//@Valid가 붙어있는 객체의 변수의 값들을 이곳으로 넘겨서 검사함
    		binder.setValidator(validator1);//@Valid가 붙어있는 bean이 여러개일때 validator갯수가 늘어남..validator1,validator2..
    	}

     

    validdateUtils

     

    지정된 값에 대해 유효성 검사를 하는 메서드

     

    rejectIfEmpty(error객체,"프로퍼티이름","코드이름"):값이 비어 있는지 확인합니다. 공백은 글자로 취급합니다.

     

    rejectIfEmptyOrWhitespace(error객체,"프로퍼티이름","코드이름") : 값이 비어 있거나 공백으로만 구성되어 있는지 확인합니다.

     

    입력값에 문제가 있다면 error 객체에 오류정보를 저장합니다. 사용할 오류 메시지는 "코드이름.bean객체이름.프로퍼티이름"으로 구성됩니다.

     

    package kr.co.softcampus.validator;
    
    import org.springframework.validation.Errors;
    import org.springframework.validation.ValidationUtils;
    import org.springframework.validation.Validator;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.support.WebBindingInitializer;
    
    import kr.co.softcampus.beans.DataBean1;
    
    public class DataBean1Validator implements Validator{
    
    	@Override
    	public boolean supports(Class<?> clazz) {//해당 클래스가 유효성 검사가 가능한지 검사
    		// TODO Auto-generated method stub
    		return DataBean1.class.isAssignableFrom(clazz);
    	}
    
    	@Override
    	public void validate(Object target, Errors errors) {//유효성 검사를 하는곳 @valid가 붙어져있는 dataBean1의 주솟값이 target매개변수로 들어옴
    		// TODO Auto-generated method stub
    		
    		ValidationUtils.rejectIfEmpty(errors, "data2","error2");//dataBean1의 data2의 변수의 값의 길이가 0이면 유효성검사 실패 0이 아니면 유효성검사 통과
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "data3", "error3");//data3의 길이가 0이거나 공백으로만 채워져있으면 에러3이라는 에러발생
    		
    	
    
    }
    

     

    rejectValue

     

    유효성 조건을 직접 만들어 검사할 때 사용합니다

     

    if문으로 유효성 검사를 해주고 위배시 rejectValue를 통해 오류 정보를 지정합니다

     

    rejectValue("프로퍼티이름","코드이름")

     

    입력값에 문제가 있다면 error 객체에 오류 정보를 저장합니다. 사용할 오류 메시지는 "코드이름.bean객체이름.프로퍼티이름"으로 구성됩니다

     

    package kr.co.softcampus.validator;
    
    import org.springframework.validation.Errors;
    import org.springframework.validation.ValidationUtils;
    import org.springframework.validation.Validator;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.support.WebBindingInitializer;
    
    import kr.co.softcampus.beans.DataBean1;
    
    public class DataBean1Validator implements Validator{
    
    	@Override
    	public boolean supports(Class<?> clazz) {//해당 클래스가 유효성 검사가 가능한지 검사
    		// TODO Auto-generated method stub
    		return DataBean1.class.isAssignableFrom(clazz);
    	}
    
    	@Override
    	public void validate(Object target, Errors errors) {//유효성 검사를 하는곳 @valid가 붙어져있는 dataBean1의 주솟값이 target매개변수로 들어옴
    		// TODO Auto-generated method stub
    		
    		ValidationUtils.rejectIfEmpty(errors, "data2","error2");//dataBean1의 data2의 변수의 값의 길이가 0이면 유효성검사 실패 0이 아니면 유효성검사 통과
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "data3", "error3");//data3의 길이가 0이거나 공백으로만 채워져있으면 에러3이라는 에러발생
    		
    		DataBean1 bean1 = (DataBean1)target;
    		
    		String data2=bean1.getData2();
    		String data3=bean1.getData3();
    		
    		if(data2.length()>10) {
    			errors.rejectValue("data2", "error4");//dataBean1의 data2의 길이가 10보다 크면 error4.dataBean1.data2에러발생
    		}
    		
    		if(data3.contains("@") == false)
    		{
    			errors.rejectValue("data3", "error5");//dataBean1의 data2에 @ 가없으면 error5.dataBean1.data3에러발생
    		}
    	}
    	
    
    }
    

     

     

     

     

     

    '웹페이지 제작을 위한 스프링공부' 카테고리의 다른 글

    mybatis(java)  (0) 2020.05.16
    interceptor  (0) 2020.05.12
    JSR-308  (0) 2020.05.12
    JSR-303  (0) 2020.05.12
    에러 메시지 커스터마이징  (0) 2020.05.12
Designed by Tistory.