@ExceptionHandler 예외처리

김예인·2023년 6월 14일

백엔드 공부일지

목록 보기
39/43
post-thumbnail

@ExceptionHandler

DTO 유효성 검증 실패 시 아래와 같은 Response Body의 내용만으로는어떤 항목이 검증에 실패했는지 알 수 없다.


1. @ExceptionHandler를 이용한 Controller 레벨에서의 예외 처리

(1) Controller 에 예외처리 메서드 생성

Controller 클래스에 '예외 처리' handleException() 메서드 생성

  • @ExceptionHandler : 예외 처리 핸들러 메서드 정의
  • MethodArgumentNotValidException : 스프링 MVC에서 유효성 검사 실패 시 발생하는 예외
  • .getBindingResult().getFieldErrors() : 유효성 검사(Validation) 수행 결과인 'BindingResult' 객체에서 실패한 필드의 오류 정보인 'FieldError' 객체들을 반환하는 메서드

MethodArgumentNotValidException 예외 발생 시, 해당 예외에서 필드 에러 정보를 가져와 BAD_REQUEST 상태로 응답한다.

전체 정보를 전달받아 에러 메시지를 구체적으로 알 수 있게 되었지만, 필요한 정보만 전달 받고 싶어!


(2) 필요한 에러 메세지만 담은 클래스 생성

ErrorResponse 클래스를 만들어서 필요한 정보만 담아 클라이언트 쪽에 전달하자.


(3) Controller 가 에러 정보 클래스를 사용하도록 적용하기

ErrorResponse 적용 후 이제는 유효성 검증에 실패한 필드의 필요한 정보만 표시하고 있다.


단점

  • 각각의 Controller 클래스마다 위 작업을 해줘야해서 코드 중복이 발생
  • Controller 에서 처리해야 하는 예외가 MethodArgumentNotValidException 만 있는게 아니기 때문에 @ExceptionHandler 를 추가한 핸들러 메서드가 너무 많다
  • 다양한 유형의 에러를 처리하기에는 적절하지 않다
profile
백엔드 개발자 김예인입니다.

0개의 댓글