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가지 어노테이션을 더 잘 구분할 수 있게 됐다.