본문 바로가기

Spring boot

@NotNull vs @NotEmpty

반응형
@PostMapping ("/quiz") //선착순퀴즈 수정 버튼
@Operation (summary = "선착순퀴즈 이벤트 수정버튼")
public QuizDTO updateQuiz(@Validated @RequestBody QuizDTO quizDTO) {
    return quizService.updateQuiz(quizDTO);
}

이런식으로 스프링 @Validated 를 썻는데

public class QuizDTO {


    @NotEmpty
    private Long id;
    
    //기타등등
}

Swagger 를 이용해 API 테스트를 하니깐 id 값이 분명 비어있지 않음에도 계속 500을 반환하였다

 

 

 

 

왜일까 검색해보니깐 

왜 Long 타입에는 @NotEmpty가 아닌 @NotNull을 사용해야 하는가?

  • Long 타입은 비어 있을 수 없습니다: Long 타입의 필드가 비어 있다는 것은 의미가 없으며, 대신 그 필드가 null인지 아닌지를 검사하는 것이 적절합니다.
  • @NotEmpty는 문자열이나 컬렉션과 같은 타입에 적용: @NotEmpty는 주로 문자열이나 컬렉션 타입에 사용되며, Long 타입 필드에 적용하는 것은 의미가 없습니다.
  • 컴파일 오류: @NotEmpty는 CharSequence, Collection, Map, 또는 Array 타입에만 사용할 수 있기 때문에, Long 타입 필드에 사용하면 컴파일 오류가 발생합니다.

따라서, Long 타입 필드에는 @NotEmpty가 아닌 @NotNull을 사용해야 합니다. 예를 들어, id 필드가 null이 아닌지 확인하려면 아래와 같이 작성해야 합니다:

 

마찬가지로 int형이나 LocalDate에는 NoEmpty를 넣으면 컴파일 에러가 난다

고마워요 GPT~~

반응형

'Spring boot' 카테고리의 다른 글

Spring 끄적끄적(5) @Transactional , Stream  (0) 2024.08.02
쿠키,세션,토큰,JWT  (0) 2024.07.31
@ModelAttribute vs @RequestBody  (0) 2024.07.28
CI/CD란 무엇인가  (0) 2024.07.25
RESTful API 란 무엇인가??  (0) 2024.07.25