728x90
특정 컬럼 값에 대해서 Null 또는 특정 패턴을 검증해야할 경우가 있다.
@Null Annotation은 Null이어야 하고, @NonNull 또는 @NotNull은 Null 값이 아니어야 한다는 뜻이다.
!? 그렇다면 Null 또는 특정 패턴일 경우에는????
정답은 정규식 패턴에서 or 연산을 뜻하는 |를 활용하는 것이었다.
Build.gradle 파일에 validation 의존성을 추가하여 사용해야 한다.(버전은 본인 버전에 맞게! 본인은 springboot 2.4.5 version 사용중)
<build.gradle>
dependencies {
**
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation
implementation('org.springframework.boot:spring-boot-starter-validation:2.4.5')
// https://mvnrepository.com/artifact/javax.validation/validation-api
implementation("javax.validation:validation-api:2.0.1.Final")
**
}
@Pattern 만 잘 활용한다면 Custom으로 값 검증을 원활하게 할 수 있는 것으로 보인다.
<~Dto.class>
import javax.validation.constraints.Pattern;
**
@Getter
@Setter
public static class RegisterRequest {
**
@Pattern(regexp = "^((19[0-9][0-9]|20\\d{2})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])|)$")
@ApiModelProperty(name="유저 생일", example="1995-11-15")
private String userBirthday;
**
}
해당 어노테이션이 바로 생년월일(YYYY-MM-DD 또는 빈 값)을 검증하는 패턴이다. 마지막에 |를 붙여서 빈 값을 허용했다.
@Pattern(regexp = "^((19[0-9][0-9]|20\\d{2})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])|)$")
Dto에서 @Patten 적용 후 Controller에서 해당하는 메소드의 파라미터 앞에 @Valid 또는 @Validated를 적용하면 작동한다.
두 어노테이션의 차이는 https://stackoverflow.com/questions/36173332/difference-between-valid-and-validated-in-spring
참고!
<~Controller.class>
import javax.validation.Valid;
**
public ResponseEntity<UserDto.Info> register(
@RequestBody @ApiParam(value="회원가입 정보", required = true) @Valid UserDto.RegisterRequest registerInfo) {
//임의로 리턴된 User 인스턴스. 현재 코드는 회원 가입 성공 여부만 판단하기 때문에 굳이 Insert 된 유저 정보를 응답하지 않음.
return new ResponseEntity<UserDto.Info>(new UserDto.Info(userService.createUser(registerInfo)), HttpStatus.OK);
}
**
728x90
'프로그래밍공부(Programming Study) > 스프링(Spring Framework)' 카테고리의 다른 글
Spring 애플리케이션 부팅 과정, 부팅속도와 CPU 할당량과의 관계 (5) | 2024.09.22 |
---|---|
스프링 부트 버전별 특징 (0) | 2022.12.03 |
스프링 MVC 1편(김영한님) 공부 - HTTP 기본 (0) | 2022.05.10 |
2022.04.21 스프링 기본 원리 공부 - 2 (0) | 2022.04.22 |
2022.04.20 스프링 기본원리 공부 (0) | 2022.04.21 |
댓글