Validation
인자 값은 항상 정상적이지는 않다. Validation은 JSON객체로 넘어오는 값이
정상적인지 체크할 수 있다. 따라서, Null 체크에 유용하다.
@PostMapping()
public String signUp(@Valid @RequestBody UserRequest request) {
return "ok";
}
public class UserRequest {
@Email
private String email;
@NotBlank
private String password;
@Valid
private Address address;
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
.
.
@GetMapping("/{id}")
public String find(@PathVariable @Min(1) Long id) {
return "ok";
}
}
NotNull, NonNull, nullable
Lombok에서 지원하는 어노테이션으로 엔티티 필드에서 Null 값을 가질 수 없게 해준다.
두 어노테이션 모두 엔티티 필드에서 null 값을 가질 수 없도록 한다.
그러면 차이는 어떤 것이 있을까?
우선 nullable의 경우 @Column과 함께 쓰이며 nullable=false를 설정하지 않는 경우 true를 기본 값으로 가진다.
nullable은 JPA가 만든 엔티티의 필드 값이 null로 채워진 상태에서 정상적으로 수행이 되다가, DB쪽으로 SQL 쿼리가 도착하는 순간에 예외가 던져지는 반면 @NotNull의 경우 DB로 쿼리가 도착하기 전에, 엔티티 필드 값이 null로 채워지는 순간에 예외가 던져진다.
@NotNull 어노테이션이 더 빠른 단계에서 예외를 색출해내므로, 조금 더 안전하다고 할 수 있다. 또한 message 속성을 통해 적용 되었을 때 나타낼 문구 설정이 가능하다.
그러나, JPA를 이용해 Entity화 시킨 것이 아니라면 @NotNull을 해석하지 못한다. 또한 DDL-AUTO가 false 상태라면 적용되지 않는다. 해석하는 주체에 따라 단순 주석이 될 수 있다.