유효성 검사 관련 어노테이션
@AssertTrue | true가 아닌 값이 들어오면 오류 발생 |
@AssertFalse | false가 아닌 값이 들어오면 오류 발생 |
@Max(값) | 값보다 큰 값이 들어오면 오류 발생 |
@Min(값) | 값보다 작은 값이 들어오면 오류 발생 |
@DecimalMax(value=값, inclusive=true/false) | 값보다 작거나 같은 값이 들어와야 한다. inclusive가 false면 값은 포함하지 않기 때문에 작은 값이 들어와야 한다.(미만) 생략하면 true(이하) |
@DecimalMin(value=값, inclusive=true/false) | 값보다 크거나 같은 값이 들어와야 한다. inclusive가 false면 값은 포함하지 않기 때문에 큰 값이 들어와야 한다.(초과) 생략하면 true(이상) |
@Null | 값이 들어오면 오류 발생 |
@NotNull | 값이 들어오지 않으면 오류 발생 |
@Digits(Interger=자릿수, fraction=자릿수) | 지정된 자릿수의 숫자가 아닐 경우 에러 발생. Integer-정수 자릿수 , fraction-실수 자릿수 |
@Size(min=글자수,max=글자수) | 지정된 글자수 보다 짧거나 길면 오류 발생 (min이상 max이하 ) |
@Pattern(regexp=정규식) | 주어진 정규식에 위배되면 오류 발생 |
@NotEmpty | 주입된 값의 길이가 0이면 오류 발생. 공백도 글자로 인식 |
@NotBlank | 주입된 값이 공백을 제외하고 길이가 0이면 오류 발생 |
@Positive | 양수가 아니라면 오류 발생 |
@PositiveOrZero | 0또는 양수가 아니라면 오류 발생 |
@Negative | 음수가 아니라면 오류 발생 |
@NegativeOrZero | 0 또는 음수가 아니라면 오류 발생 |
@Email | 이메일 형식이 아니라면 오류 발생. 중간에 @가 있는지 정도만 확인함 |
custom validator
controller
@Controller
public class TestController {
@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);
//binder.addValidators(validator1, validator2, validator3..binder..);
binder.addValidators(validator1);
}
}
Validator
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("@")) {
errors.rejectValue("data3", "error5");
}
}
}
Validator 인터페이스
를 구현한다.supports
: 유효성 검사할 데이터를 가지고 있는 객체가 유효성 검사가 가능한지 확인(@Valid 확인)validate
: 유효성 검사를 하는 메서드valdate(Object target)
: @Valid가 적용된 객체의 주소값이 매개변수로 들어온다. (Object target)@InitBinder
public void initBinder(WebDataBinder binder) {
DataBean1Validator validator1 = new DataBean1Validator();
//binder.setValidator(validator1);
//binder.addValidators(validator1, validator2, validator3..binder..);
binder.addValidators(validator1);
}
setValidator
, 한 개 이상이면 addValidators
메서드를 사용ValidateUtils
rejectIfEmpty(error객체, "property name", "code name")
: 값이 비어 있는지 확인한다. 공백은 글자로 취급.rejecIfEmptyOrWhitespace(error객체, "property name", "code name")
: 값이 비어있거나 공백으로만 구성되어 있는지 확인"codeName.bean객체이름.property name"
으로 구성 -> .properties로 등록rejectValue
rejectValue
를 통해 오류정보를 지정한다.rejectValue("프로퍼티이름","코드이름")
"codeName.bean객체이름.property name"
으로 구성 -> .properties로 등록reference by 윤재성의 만들면서 배우는 Spring MVC 5