본문 바로가기

Spring

@Valid BindingResult 으로 검증 및 에러처리

반응형

Spring 프로젝트 중 @Valid annotation을 이용해
간단하게 validation 방법에 대해 알아본다

입력 값을 전달받았을 때, Controller 에서 @Valid annotation 으로 지정된 필드값에 대해서 검증을 진행하고 조건에 부합하지 못할 시에 알맞게 오류처리하는 방법에 대해 알아보자

 

1. maven dependency 추가

<dependency>
	<groupId>javax.validation</groupId>
	<artifactId>validation-api</artifactId>
	<version>2.0.1.Final</version>
</dependency>
        
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>5.2.2.Final</version>
</dependency>

 

2. VO에 어노테이션을 valid 설정을 한다.
@Pattern(regexp = "^[_0-9a-zA-Z-]+@[0-9a-zA-Z]+(.[_0-9a-zA-Z-]+)*$", message = "not email")
@Size(min = 4, max = 45, message = "name is 4 to 45")
@Max(value = 3, message = "not allow type")
@Min(value = 1, message = "not allow type")
 
@AssertFalse  거짓인지?
@AssertTrue 참인지?
@DecimalMax 지정 값 이하의 실수인지?
@DecimalMin 지정 값 이상의 실수인지?
@Digits(integer=,fraction=) 정수 여부
@Future 미래 날짜인지?
@Max 지정 값 이상인지?
@Min 지정 값 이하인지?
@NotNull  Null이 아닌지?
@Null Null인지?
@Pattern(regex=,flag=) 정규식을 만족하는지?
@Past   과거날짜인지?
@Size(min=,max=)  문자열 또는 배열등의 길이 만족 여부

 

3. Controller 작성

앞서 각 Valid annotation 을 명시한 VO에 요청받은 데이터를 검증 및 결과 처리를 위해 controller에 @ValidBindingResult를 명시한다.

@PostMapping("/api/user")
@ResponseBody
public String loginUser(@RequestBody @Valid User user, BindingResult bindingResult) { 
  return "login";
}

 

4. BindingResult 처리

검증이 완료된 데이터는 bindingResult 로 하기처럼 간단하게 처리할 수 있다.

private int validationAccountCheck(BindingResult bindingResult, String id) {
		if(bindingResult.hasErrors() || bindingResult.getErrorCount() != 0) {
			List<FieldError> list = bindingResult.getFieldErrors();
			for(FieldError error : list) {
				log.info("CLIENT_ID:[" + id + "] ERROR:" +error.getDefaultMessage());
			}
			return ValidatorCode.ACCOUNT_ERR.getCode();
		}else return ValidatorCode.OK.getCode();
	}

 

반응형