[TIL] MethodArgumentNotValidException, ConstraintViolationException

@ControllerAdvice로 예외처리를 만들고 테스트를 하다가

@Valid는 MethodArgumentNotValidException 예외처리를 발생한다고 하던데

MethodArgumentNotValidException이 발생하지 않고

ConstraintViolationException로 계속해서 에러를 발생하고 있어서

왜 그러지…? 하고 생각을 하고 있었다.

MethodArgumentNotValidException 예외는

주로 DTO 필드에 붙은 @NotNull 어노테이션과

컨트롤러 파라미터 앞에 붙은 @Valid 어노테이션을 통해 던져진다.

@NotNull 어노테이션을 DTO 필드에 붙여두어도,

`해당 DTO를 받아내는 메서드 파라미터 위치에 @Valid 어노테이션을 추가하지 않으면 검증이 동작하지 않는다.`

라는 글을 보게되었고..

나는 DTO에 @NotNull과 같은 어노테이션을 붙이지 않고 있었다.( 엔티티에만 해놨다.. )

그래서 계속해서 엔터티 관련 예외를 발생하고 있었다. (ConstraintViolationException)


정리하자면

ConstraintViolationException - 엔터티 예외

MethodArgumentNotValidException - DTO 예외