2020. 9. 20. 21:18ㆍJava/Spring
Validator 인터페이스 구현
- 먼저 Validator 인터페이스를 구현해야 한다.
- supports : 유효성 검사할 데이터를 가지고 있는 객체가 유효성 검사가 가능한지 확인한다.
- validate : 유효성 검사를 하는 메서드
패키지를 하나 생성하여 다음과 같은 클래스를 만든다.
public class DataBeanValidator 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
}
}
Validator를 컨트롤러에서 등록
- Validator를 컨트롤러에서 등록해준다.
- 사용할 Validator가 하나면 setValidator, 한 개 이상이면 addValidators 메서드를 사용한다.
다음 메소드를 controller에 등록한다.
@InitBinder
public void initBinder(WebDataBinder binder) {
DataBeanValidator validator1 = new DataBeanValidator();
binder.addValidators(validator1);//여러개 주입 가능
}
ValidateUtils
- 지정된 값에 대해 유효성 검사를 하는 메서드
- rejectIfEmpty(error객체, “프로퍼티이름“, “코드이름“) : 값이 비어 있는지 확인합니다. 공백은 글자로 취급한다.
- rejectIfEmptyOrWhitespace(error객체, “프로퍼티이름“, “코드이름“) : 값이 비어 있거나 공백으로만 구성되어 있는지 확인한다.
- 입력값에 문제가 있다면 error 객체에 오류정보를 저장합니다. 사용할 오류 메시지는 “코드이름.bean객체이름.프로퍼티이름”으로 구성된다.
다음과 같이 수정한다.
public class DataBeanValidator 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) {
ValidationUtils.rejectIfEmpty(errors, "data1", "error1");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "data2", "error2");
}
}
target에 controller에서 valid로 주입된 객체의 주소값이 주입된다.
위 코드처럼 설정시 target에 들어온 객체의 data1의 값이 비어있으면 error1을 출력하고,
data2의 값을 공백을 모두 제거하고 길이가 0이면 error2를 출력한다.
위 에러 메세지는 아래와 같이 접근하여 properties에서 수정 가능하다.
rejectValue
- 유효성 조건을 직접 만들어 검사할 때 사용한다.
- If문으로 유효성 검사를 해주고 위배시 rejectValue를 통해 오류 정보를 지정한다.
- rejectValue( “프로퍼티이름“, “코드이름“)
- 입력값에 문제가 있다면 error 객체에 오류정보를 저장합니다. 사용할 오류 메시지는 “코드이름.bean객체이름.프로퍼티이름”으로 구성된다.
아래와 같이 메소드를 변경한다.
public class DataBeanValidator 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) {
ValidationUtils.rejectIfEmpty(errors, "data1", "error1");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "data2", "error2");
DataBean1 bean1 = (DataBean1)target;
String data1 = bean1.getData1();
String data2 = bean1.getData2();
if(data1.length()>10) {
errors.rejectValue("data1","error3");
}
if(data2.contains("@") == false) {
errors.rejectValue("data2","error4");
}
}
}
bean객체에서 값을 꺼내와서 조건을 주고, error를 설정한다.
이 역시 properties에서 설정 가능하다.
'Java > Spring' 카테고리의 다른 글
Spring MVC - 페이지 예외처리 (0) | 2020.09.22 |
---|---|
Spring MVC - Interceptor (0) | 2020.09.21 |
Spring MVC - JSR-380 어노테이션 정리 (0) | 2020.09.20 |
Spring MVC - JSR-303 어노테이션 정리 (0) | 2020.09.19 |
Spring MVC - 유효성 검사(@Valid,JSR-303) (0) | 2020.09.17 |