[TIL] MethodArgumentNotValidException, ConstraintViolationException
@ControllerAdvice로 예외처리를 만들고 테스트를 하다가
@Valid는 MethodArgumentNotValidException 예외처리를 발생한다고 하던데
MethodArgumentNotValidException이 발생하지 않고
ConstraintViolationException로 계속해서 에러를 발생하고 있어서
왜 그러지…? 하고 생각을 하고 있었다.
MethodArgumentNotValidException 예외는
주로 DTO 필드에 붙은 @NotNull 어노테이션과
컨트롤러 파라미터 앞에 붙은 @Valid 어노테이션을 통해 던져진다.
@NotNull 어노테이션을 DTO 필드에 붙여두어도,
`해당 DTO를 받아내는 메서드 파라미터 위치에 @Valid 어노테이션을 추가하지 않으면 검증이 동작하지 않는다.`
라는 글을 보게되었고..
나는 DTO에 @NotNull과 같은 어노테이션을 붙이지 않고 있었다.( 엔티티에만 해놨다.. )
그래서 계속해서 엔터티 관련 예외를 발생하고 있었다. (ConstraintViolationException)
정리하자면
ConstraintViolationException - 엔터티 예외
MethodArgumentNotValidException - DTO 예외