본문 바로가기
Back-End/Spring

TIL 230725 : RestControllerAdvice로 전역 예외 처리

by 우인입니다 2023. 7. 25.

이전 코드

현재 모든 컨트롤러에 비슷한

예외처리 문구로 try-catch문이 주렁주렁 달려있다.

 

@Controller Advice라는 전역예외처리 기능을 이제야 알아서 안타깝지만 이제라도 알아서 리팩토링을 해본다.

 


추가 코드

common패키지에 해당 클래스를 추가해두었다.

추가된 코드를 하나하나 살펴보자.

 

 

@RestControllerAdvice

Controller와 RestConroller의 차이처럼 해당 메소드가 실행됐을 때 결과값을 바디에 바로 보내주는 기능이 추가된것이다.

@ControllerAdvice 어노테이션으로 선택하여 사용이 가능하다.

 

아래는 @ControllerAdvice에 대한 설명이다.

@ExceptionHandler, @InitBinder, @ModelAttribute 이 세 메소드에 대해 공통적으로 적용할 때 사용하는 듯 설명이 적혀있다.

아직은 @ExceptionHandler 에 대해서만 쓰임을 알고 있지만 확인해 두면 다음에 활용할 일이 생긴다.

 

 

@ExceptionHandler({IllegalArgumentException.class})

이렇게 선언해주면 그 뒤에 선언된 예외처리에 대해 그 예외를 가져와서 메소드를 실행해준다.

 

현재 위처럼 되어있는 Post도메인의 한 메소드인데 이를 실행시켜주면 아래와 같이 나온다.

 

statusCode가 0인 것은 ApiResponseDto에 메시지만 넣어줘서 기본값이 나왔다.

 

아래와같이 수정해줬다.

수정 적용

 

 

이렇게 되면 원래 try-catch문으로 감싸져 예외처리를 하던 대부분의 컨트롤러 단의 메소드들은 아래처럼 정리가 된다.

 

 

 


더 공부할 점

 

1. 이미 만들어져있는 다양한 예외는 어떤 것들이 있고 어떻게 쓰는게 좋은 지.

2. 각각의 예외의 경우에 처리해야하는 방법. (예시에서는 한가지 예외에 대해서만 전역 처리를 했다)

3. 예외나 성공했을 때 Response를 어떻게 하는 것이 좋은지? 컨벤션이 있는지?