Valid 유효성 검사

LEE YUJIN·2023년 11월 21일
0

Spring

목록 보기
1/6

유효성 검사 관련 어노테이션

@AssertTruetrue가 아닌 값이 들어오면 오류 발생
@AssertFalsefalse가 아닌 값이 들어오면 오류 발생
@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양수가 아니라면 오류 발생
@PositiveOrZero0또는 양수가 아니라면 오류 발생
@Negative음수가 아니라면 오류 발생
@NegativeOrZero0 또는 음수가 아니라면 오류 발생
@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");
		}
	}
}
  1. Validator 인터페이스를 구현한다.
  • 추상 메서드 사용
    • supports : 유효성 검사할 데이터를 가지고 있는 객체가 유효성 검사가 가능한지 확인(@Valid 확인)
    • validate : 유효성 검사를 하는 메서드
    • valdate(Object target) : @Valid가 적용된 객체의 주소값이 매개변수로 들어온다. (Object target)
  1. Validator를 Controller에 등록한다.
@InitBinder
	public void initBinder(WebDataBinder binder) {
		DataBean1Validator validator1 = new DataBean1Validator();
		//binder.setValidator(validator1);
		//binder.addValidators(validator1, validator2, validator3..binder..);
		binder.addValidators(validator1);
	}
  • 사용할 validator가 하나면 setValidator, 한 개 이상이면 addValidators 메서드를 사용

ValidateUtils

  • 지정된 값에 대해 유효성 검사를 하는 메서드
  • property name : 유효성 검사를 할 변수의 이름
  • rejectIfEmpty(error객체, "property name", "code name") : 값이 비어 있는지 확인한다. 공백은 글자로 취급.
  • rejecIfEmptyOrWhitespace(error객체, "property name", "code name") : 값이 비어있거나 공백으로만 구성되어 있는지 확인
  • 입력값에 문제가 있다면 error 객체에 오류정보를 저장한다. 사용할 오류 메시지는 "codeName.bean객체이름.property name"으로 구성 -> .properties로 등록

rejectValue

  • 유효성 조건을 직접 만들어 검사할 때 사용한다.
  • if문으로 유효성 검사를 해주고 위배시 rejectValue를 통해 오류정보를 지정한다.
  • rejectValue("프로퍼티이름","코드이름")
  • 입력값에 문제가 있다면 error 객체에 오류정보를 저장한다. 사용할 오류 메시지는 "codeName.bean객체이름.property name"으로 구성 -> .properties로 등록

reference by 윤재성의 만들면서 배우는 Spring MVC 5

profile
개발 공부노트

0개의 댓글