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에 @Valid 와 BindingResult를 명시한다.
@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();
}
'Spring' 카테고리의 다른 글
Spring - bean factory pattern (injecting Collections) (0) | 2023.03.03 |
---|---|
spring boot sql script 한글 깨짐 현상 (0) | 2020.12.18 |
Spring boot, annotation 정리 (0) | 2020.10.20 |
Spring REST API - Swagger2 연동 (0) | 2019.08.08 |