Java Bean Validation(JSR 380)
- 객체 유효성을 어노테이션으로 손쉽게 적용할 수 있는 API를 제공한다.
- DTO(Data Transfer Object)는 순수하게 데이터 전송을 위해 객체이지만 요청 데이터의 유효성을 검증하는 것이 더 중요하므로 DTO도 검증 대상이 된다.
의존성
- implementation("org.springframework.boot:spring-boot-starter-validation")
@Valid
- @Valid 어노테이션을 붙이면 유효성 검사 기능을 활성화한다.
- 클래스의 필드, 메서드의 매개변수, 메서드의 반환 값에 붙일 수 있다.
- 주로 컨트롤러에서 요청 데이터 유효성 검증한다.
@PostMapping("v1/spaces/{spaceId}/reservations")
public ResponseEntity<SpaceReservation> reserve(@Valid @PathVariable Long spaceId, @RequestBody RequestCreateReservation req) {
SpaceReservation reservation = reservationService.reserve(req.userId(), spaceId, req.reservationDate(), req.startTime(), req.endTime());
return new ResponseEntity<>(reservation, HttpStatus.CREATED);
}
public record RequestUpdateReservation(
@NotNull(message = "userId cannot be null.")
Long userId,
@NotNull(message = "spaceId cannot be null.")
Long spaceId,
@NotNull(message = "reservationDate cannot be null.")
@Future
LocalDate reservationDate,
@NotNull(message = "startTime cannot be null.")
LocalTime startTime,
@NotNull(message = "endTime cannot be null.")
LocalTime endTime,
@NotNull(message = "isReserved cannot be null.")
Boolean isReserved) {
}
주요 기능
- @NotNull
- 필드가 null이 아니어야 함.
- @NotEmpty
- 문자열, 컬렉션, 맵, 배열이 null이 아니어야 하고, 비어 있지 않아야 함.
- @NotBlank
- 문자열이 null이 아니고, 공백이 아니고, 공백 문자만을 포함하지 않아야 함.
- @Size(min=, max=)
- 문자열, 컬렉션, 배열의 크기가 지정된 범위 내에 있어야 함.
- @Min(value)
- 숫자 값이 지정된 최소값 이상.
- @Max(value)
- 숫자 값이 지정된 최대값 이하.
- @Email
- 문자열이 이메일 형식.
- @Positive
- 숫자 값이 양수.
- @PositiveOrZero
- 숫자 값이 양수거나 0.
- @Negative
- 숫자 값이 음수.
- @NegativeOrZero
- 숫자 값이 음수거나 0.
- @Past
- 날짜나 시간 값이 과거.
- @PastOrPresent
- 날짜나 시간 값이 과거 또는 현재.
- @Future
- 날짜나 시간 값이 미래.
- @FutureOrPresent
- 날짜나 시간 값이 미래 또는 현재.
- @Pattern(regexp = "{정규표현식}")
- 더 많은 기능을 제공하며 아래 링크에서 찾아볼 수 있다.
https://jakarta.ee/specifications/bean-validation/3.0/apidocs/