🧩 Bean Validation 제약 조건

정의

@NotNull, @NotEmpty, @NotBlankBean Validation에서 값의 존재 여부를 검증하는 대표적인 제약 조건 애너테이션이다. 비슷해 보여도 검증 대상과 허용 범위가 다르다.

  • @NotNull은 null 여부만 검사한다.
  • @NotEmpty는 null이 아니고 비어 있지 않아야 한다.
  • @NotBlank는 문자열에서 null, 빈 문자열, 공백 문자열을 모두 허용하지 않는다.

⚙️ 각 애너테이션의 비교

애너테이션 null 허용 빈 문자열 허용 공백 문자열 허용 컬렉션 검사 주요 대상
@NotNull ❌ 불가 ✅ 허용 ✅ 허용 모든 타입
@NotEmpty ❌ 불가 ❌ 불가 ✅ 허용 String, 배열, 컬렉션
@NotBlank ❌ 불가 ❌ 불가 ❌ 불가 문자열(String)

핵심 차이

  • @NotNull: 값이 존재해야 한다.
  • @NotEmpty: 값이 존재하면서 길이 또는 크기가 0보다 커야 한다.
  • @NotBlank: 문자열이면서 공백만 있는 값도 허용하지 않는다.

🛠 사용 예시

public class UserRequest {

    @NotNull
    private String id; // 반드시 값이 존재해야 함

    @NotEmpty
    private List<String> tags; // null 또는 빈 리스트 허용하지 않음

    @NotBlank
    private String name; // " " 공백도 허용하지 않음
}

🛠 메시지 커스터마이징 예시

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

@NotEmpty(message = "최소 하나의 태그가 필요합니다.")
private List<String> tags;

@NotNull(message = "ID는 null일 수 없습니다.")
private Long id;

✅ 언제 어떤 애너테이션을 써야 할까?

  • @NotNull은 null 여부만 확인할 때 사용한다.
  • @NotEmpty는 문자열, 배열, 컬렉션이 비어 있으면 안 될 때 사용한다.
  • @NotBlank는 사용자 입력 문자열에서 공백만 입력된 경우까지 막고 싶을 때 사용한다.

⚠️ 주의사항

  • @NotBlank는 문자열 전용이다.
  • @NotEmpty는 문자열뿐 아니라 컬렉션과 배열에도 사용할 수 있다.
  • 실제 요청 검증에서는 보통 @Valid와 함께 사용한다.
  • 검증 실패 시 어떤 메시지를 보여줄지 message 속성으로 조정할 수 있다.

📌 정리

  • @NotNull, @NotEmpty, @NotBlank는 서로 비슷하지만 허용 범위가 다르다.
  • 가장 자주 헷갈리는 부분은 빈 문자열과 공백 문자열의 차이다.
  • 입력 검증에서는 대상 타입과 허용 조건을 먼저 생각하고 애너테이션을 고르는 것이 좋다.

연결문서

태그:

카테고리:

업데이트:

댓글남기기