WEB/Error
@NotNull @NotEmpty @NotBlank
hwahaha
2024. 9. 21. 13:20
BudgetKeemi 프로젝트에서의 고민
데이터를 검증하다 보면 @NotNull, @NotEmpty, @NotBlank 이 세 가지 어노테이션을 자주 사용하게 된다.
하지만 이 어노테이션은 서로 다른 특징을 가지고 있어 가끔 헷갈린다.
@NotNull @NotEmpty @NotBlank의 특징
@NotNull: 값이 Null을 허용하지 않는다
@NotEmpty: 값이 Null 이나 ""(빈문자열)을 허용하지 않는다
@NotBlank: 값이 Null 이나 ""(빈문자열)," "(공백)을 허용하지 않는다
문제점
나는 이 3가지를 자주 헷갈리곤 해서 허용하지 않는 범위가 가장 넓은 @NotBlank를 자주 사용했다.
그러던 도중에 이번 프로젝트에서 문제가 발생했다.
UnexpectedTypeException 예외가 발생했다.
하지만 내가 기대한건 MethodArgumentNotValidationException 예외였다.
이유와 해결
알고보니 UnexpectedTypeException은 유효성 검사가 잘못된 데이터 타입에 적용됐을때 발생한다.
그리고 @NotBlank 어노테이션은 String 타입에만 적용할 수 있었다.
문제가 된 부분은 따라서 Enum 타입에 @NotBlank를 사용했기 때문이다.
Enum은 문자열이 아니기 때문에 여기서는 @NotNull을 사용해야한다.
배운 점
이번 경험을 통해 이 3가지 어노테이션을 더 잘 구분할 수 있게 됐다.