-
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