-
Spring MVC - Validator 커스터마이징Spring/Spring MVC 2022. 1. 3. 21:31728x90반응형
Validator 커스터마이징
- 라이브러리를 사용하지 않고 개발자가 필요한 Validator을 만들어보자.
- 지금까지 유효성 검사는 Hibernate를 이용하였었다.
- JSR-303, JSR-380 에 필요한 Validator가 없을 때 추가적으로 유효성 검사 조건이 필요할 경우 만든다.
우선 error_message.properties를 Message로 등록을 하고 DataBean1을 만들어준다.
Mesage 등록은 이전 게시판 참고하길 바란다.
DataBean1의 property에 어니 테이션 없이 Validator 커스터마이징으로 유효성 검사를 해보자.
public class DataBean1 { @Size(min=2, max=10) private String data1; private String data2; private String data3; // ....setter, getter.... }
위 data2, data3 2개의 프로퍼티는 Validator 커스터마이징으로 유효성 검사
Validator 인터페이스 상속받는 클래스 구현
- supports : 유효성 검사할 데이터를 가지고 있는 객체가 유효성 검사가 가능한지 확인하는 메서드
- validate : 유효성 검사를 하는 메서드
▼ DataBean1Validator.java
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) { // TODO Auto-generated method stub ValidationUtils.rejectIfEmpty(errors, "data2", "error2"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "data3", "error3"); DataBean1 bean1 = (DataBean1)target; String data2 = bean1.getData2(); String data3 = bean1.getData3(); if(data2.length() > 10) errors.rejectValue("data2", "error4"); if(data3.contains("@") == false) errors.rejectValue("data3", "error5"); } }
public boolean supports(Class<?> clazz) {
- clazz안에 유효성 검사를 하기 위한 클래스 타입이 들어온다.
DataBean1.class.isAssignableFrom(clazz);
- 해당 클래스가 유효성 검사가 가능한지 알아본다.
public void validate(Object target, Errors errors) {
- 유효성 검사를 실행하는 곳
- Controller에 등록해줘야 한다.
- Controller에 등록 시 해당 유효성 검사를 시행
- 객체의 주소 값은 target에 들어온다.
- 기본적으로 제공되는 메서드들이 있다.
ValidationUtils.rejectIfEmpty(errors, "data2", "error2");
- 기본적으로 제공되는 메서드, 값이 비어 있는지 확인
- rejectIfEmpty(error객체, 프로퍼티이름, 코드이름)
- 위반 내용이 있으면 error 객체에 오류정보를 저장
- error2.dataBean1.data2 로 오류코드가 저장된다.
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "data3", "error3");
- 기본적으로 제공되는 메서드, 값이 비어있거나 공백으로 되어있는지 확인
- rejectIfEmpty(error객체, 프로퍼티이름, 코드이름)
- 위반 내용이 있으면 error 객체에 오류정보를 저장
- error3.dataBean1.data3 로 오류코드가 저장된다.
errors.rejectValue("data2", "error4");
errors.rejectValue("data3", "error5");
- 기본 메서드를 이용하지 않고 유효성 조건을 직접 만들어 검사할 때 사용
- 위반 내용이 있으면 rekectValue를 통해 오류정보를 저장
- rejectValue(프로퍼티이름, 코드이름)
- error4.dataBean1.data2 로 오류코드가 저장된다.
Controller에 개발자가 설정한 Validate 등록
▼ Controller
@Controller public class testControllor { @GetMapping("/input_data") public String input_data(DataBean1 dataBean1) { return ("input_data"); } @PostMapping("/input_pro") public String input_pro(@Valid DataBean1 dataBean1, BindingResult result) { if(result.hasErrors()) return "input_data"; return "input_success"; } @InitBinder public void initBinder(WebDataBinder binder) { DataBean1Validator validator1 = new DataBean1Validator(); binder.setValidator(validator1); } }
@InitBinder
- Validator 등록
public void initBinder(WebDataBinder binder) {
- WebDataBinder : HTTP 요청정보를 컨트롤러 메서드의 파라미터나 모델에 바인딩할 때
사용되는 바인딩 오브젝트
DataBean1Validator validator1 = new DataBean1Validator();
- 설정한 사용자 정의 Validator 객체 생성
binder.setValidator(validator1);
- 사용자 정의 Validator가 1개일 때
binder.addValidators(validator1);
- 사용자 정의 Validator가 1개 이상일 때
728x90반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 예외처리 (0) 2022.01.04 Spring MVC - Interceptor (0) 2022.01.03 Spring MVC - JSR-380 어노테이션(Annotation) (0) 2022.01.03 Spring MVC - JSR-303 어노테이션(Annotation) (0) 2022.01.03 Spring MVC - 에러 메시지 커스터마이징, From 데이터 유지하기 (0) 2022.01.03