public class ProductRequest {
@NotNull // 인자로 들어온 필드 값에 null 값을 허용하지 않음
private String productName;
@Email // 이메일 형식에 맞춘 값이 들어와야함
private String email;
}
@RestController
public class ProductController {
@PostMapping("/api/v1/product")
public Product save(@Valid @RequestBody ProductRequest productRequest) {
~~~
}
}
null | "" | " " | |
@NotNull | X | O | O |
@NotEmpty | X | X | O |
@NotBlank | X | X | X |
public class MaxOrMin {
@DecimalMax(value = "10000000")
private BigInteger decimalMax;
@DecimalMin(value = "1")
private BigInteger decimalMin;
@Max(value = 1000000)
private Integer max;
@Min(value = 1)
private Integer min;
}
Decimal과 기본 Max/Min의 차이는 범위 값의 차이다. String을 사용하는지 Integer를 사용하는지에 따라 범위가 달라지기 때문이다.
public class Range {
@Positive
private Integer positive;
@PositiveOrZero
private Integer positiveOrZero;
@Negative
private Integer negative;
@NegativeOrZero
private Integer negativeOrZero;
}
public class Time {
@Future
private Date future;
@FutureOrPresent
private Date futureOrPresent;
@Past
private Date past;
@PastOrPresent
private Date pastOrPresent;
}
public class Bool {
@AssertTrue
private boolean assertTrue;
@AssertFalse
private boolean assertFalse;
}
public class Size {
@Size(max=25, min=7)
private String sizeString;
}
이 외에도 추가적인 것들이 더 있다.
https://docs.jboss.org/hibernate/beanvalidation/spec/2.0/api/
public class Account {
@NotNull
// @NotNull(groups = BasicInfo.class) @Validated 사용
private String password;
@Email
// @Email(groups = BasicInfo.class) @Validated 사용
private String email;
// 나중에 필드가 추가된다면? 현재 기준으로 작성되었던 테스트도 실패하게 된다.
}