서버에서 데이터를 바인딩할때, 데이터의 유효성을 검증하기 위해 @Validated 어노테이션을 이용할 수 있다.
BingdingResult 를 함께 사용하여 유효성 검증 오류를 처리할 수 있다.
@Valid 와 @Validated 의 차이는 이전 글을 작성해뒀다!
[Spring] @Valid 와 @Validated 차이
기존에 스프링은 유효성 검증을 위해 @Valid 어노테이션을 제공했음. 그런데 같은 객체 내의 파라미터들을 그룹핑하여 특정 상황에 맞게 유효성 검증을 하기 위해 @Validated 가 추가되었다. ex) 회원
jy-note.tistory.com
이번 글에서는 @Validated 에 추가된 기능인 그룹핑을 하여 데이터 유효성 검증하는 걸 정리할 것이다. 만약 그룹핑하지않고 그냥 검증한다면 ValidationGroup의 사용만 빼주면 된다.)
내 프로젝트는 spring boot + gradle 를 사용중이다.
--- 사용법
1. 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-validation'
annotationProcessor 'jakarta.validation:jakarta.validation-api'
(만약 springboot 2.4.x 버전 이하를 사용하고있다면 org.springframework.boot:spring-boot-starter-validation 은 생략가능하다. springboot 라이브러리에 포함되어있다. 2.3.x 버전부터 빠지게 되었는데 2.4x까지는 포함시켜준다나 뭐라나.,.. 나는 2.6.2 버전을 사용중이므로 추가해줬다.)
2. ValidationGroup class 작성
public class ValidationGroup{
//사용자 등록
public interface userInsertGroup{}
//사용자 수정
public interface userUpdateGroup{}
}
3. 검증할 데이터 클래스(UserVo)에 조건 추가
public class UserVo{
//사용자 등록, 수정 시에 빈 값 체크
@NotBlank(group={ValidationGroup.userInsertGroup.class, ValidationGroup.userUpdateGroup.calss})
private String userId;
//사용자 등록시에만 빈 값 체크
@NotBlank(group={ValidationGroup.userInsertGroup.class})
private String userName;
@NotBlank(group={ValidationGroup.userInsertGroup.class, ValidationGroup.userUpdateGroup.calss})
private String userPwd;
}
- @NotBlank : null 과 "", " "(빈 공백 문자열)을 허용하지 않음.
- @NotEmpty : null 과 ""를 허용하지 않음.
- @NotNull : 모든 데이터 타입에 대해 null을 허용하지 않음.
- @Max, @Min 등등 더 다양한 유효성 검증 조건이 있으니 필요에 따라 찾아보시길..
4. Controller 의 api 호출 시, 데이터 유효성 검증 및 검증 오류 처리.
@ResponseBody
@PostMapping("/insert")
public String userInsert(@Validated(ValidationGroup.userInsertGroup.class) UserVo userVo, BindingResult bindingResult){
result = null;
//유효성 검증 체크. 실패 시 실패 메세지 전달
//userInsertGroup을 사용하므로 userId, userName, userPwd 를 모두 체크
if(bindingResult.hasErrors(){
result = "필수 데이터의 정보를 확인해주세요";
return result;
}
//이후 등록 로직 진행
}
@ResponseBody
@PostMapping("/update")
public String userUpdate(@Validated(ValidationGroup.userUpdateGroup.class) UserVo userVo, BindingResult bindingResult){
result = null;
//유효성 검증 체크. 실패 시 실패 메세지 전달
//userUpdateGroup 을 사용하므로 userId, userPwd 만 체크
if(bindingResult.hasErrors(){
result = "필수 데이터의 정보를 확인해주세요";
return result;
}
//이후 수정 로직 진행
}
* 주의할 점 : BindingResult 를 검증할 객체(나의 경우 userVo) 바로 뒤에 사용하여야 한다.
'개발 > Spring' 카테고리의 다른 글
nested exception is org.apache.ibatis.binding.BindingException: Parameter 'fromDate' not found. (0) | 2022.02.16 |
---|---|
log4j2 + slf4j 설정하기 ( + lombok) (0) | 2022.01.21 |
Spring HandlerInterceptorAdapter deprecated 해결. (1) | 2022.01.17 |
[Spring] @Valid 와 @Validated 차이 (1) | 2022.01.04 |
[spring] org.springframework.validation.BindException 에러 (0) | 2021.12.02 |