[SpringBoot] spring-boot-starter-validation - 1.Constrain Annotation

유알·2023년 1월 27일
0

[Spring]

목록 보기
4/17

1. 의존성 추가

// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation
implementation 'org.springframework.boot:spring-boot-starter-validation:3.0.2'

내부적으로 hibernate-validator 를 가지고 있다.

2. Constrain Annotation

이 링크에 아주 자세히 나와있다.
https://docs.jboss.org/hibernate/validator/8.0/reference/en-US/html_single/#validator-defineconstraints-spec

아래의 내용은 모두 공식문서에서 비롯되었다.

https://www.baeldung.com/javax-validation

문자열 검증(@NotNull, @NotEmpty, @NotBlank, @Null)

@Null

어떤 타입이든 허용 Null이어야 한다.

@NotNull

null 이 아닌 어떤 타입이든 허용한다.
반드시 값이 있어야 한다.

@NotNull(message = "이름은 필수 값 입니다.")
private String name;

@NotBlank

null 이거나 빈 문자열("")이면 안된다.

@NotBlank(message = "이름은 필수 값 입니다.")
private String name;

@NotEmpty

null 이거나 빈 문자열("")이거나 공백 문자열(" ")이면 안된다.

@NotNull(message = "이름은 필수 값 입니다.")
private String name;

Boolean 검증(@AssertTrue, @AssertFalse)

@AssertTrue
private boolean true;

최대 최소 검증(@Max, @Min, @DecimalMax, @DecimalMin)

@Max @Min

이상, 이하 체크 (value 값과 같은 값도 허용)

@Min(value = 1)
private int min;

@DecimalMax, @DecimalMin

@DecimalMax(value=, inclusive=) , @DecimalMin(value=, inclusive=)
소수까지 검증 가능
inclusive=true 시 value 값도 허용됨 (이상, 이하)
inclusive=false 시 value 값 불허용됨 (초과, 미만)

@DecimalMin(value = "0.1", inclusive = false)
protected Double minBalance;
@DecimalMax(value = "1000000", inclusive = false)
protected Double maxBalance;

크기 검증(@Size)

@Size(min=, max=)
min과 max 로 설정한 경계(포함) 안의 값이어야 한다.

적용 가능 타입 : CharSequence, Collection, Map and arrays

시간 검증(@Future, @FutureOrPresent, @Past, @PastOrPresent)

@Future

현재 보다 미래

@FutureOrPresent

현재 또는 미래

@Past

현재 보다 과거

@PastOrPresent

현재 또는 과거

적용가능 타입

java.util.Date java.util.Calendar
java.time.Instant java.time.LocalDate
java.time.LocalDateTime java.time.LocalTime
java.time.MonthDay java.time.OffsetDateTime
java.time.OffsetTime java.time.Year
java.time.YearMonth java.time.ZonedDateTime
java.time.chrono.HijrahDate
java.time.chrono.JapaneseDate
java.time.chrono.MinguoDate
java.time.chrono.ThaiBuddhistDate

부호, 범위 검증(@Positive, @PositiveOrZero, @Negative, @NegativeOrZero)

@Positive

양수만 가능

@PositiveOrZero

양수 또는 0

@Negative

음수

@NegativeOrZero

음수 또는 0

자릿수 검증(@Digits)

@Digits(integer=, fraction=)

integer= 허용되는 최대 정수 자릿수
fraction= 허용되는 최대 소수 자릿수

@Digits(integer = 3, fraction = 4)
private Integer digits;

이메일 검증(@Email)

@Email

이메일 주소 형식인지 확인
선택적 파라미터 regexpflags를 사용하면 추가적으로 일치해야하는 정규식을 지정가능

패턴 검증(@Pattern)

@Pattern(regex=, flags=)

CharSequence가 regex와 맞는지 검증
Checks if the annotated string matches the regular expression regex considering the given flag match (flag 부분 해석 확실치 않음)

@Pattern(regexp = "(.+?)@(.+?)")
protected String email;
profile
더 좋은 구조를 고민하는 개발자 입니다

0개의 댓글