이전 코드
현재 모든 컨트롤러에 비슷한
예외처리 문구로 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를 어떻게 하는 것이 좋은지? 컨벤션이 있는지?
'Back-End > Spring' 카테고리의 다른 글
TIL 230727 : 튜터님 예제 보며 정리한 마이크로 팁들 (0) | 2023.07.28 |
---|---|
TIL 230726 : CustomException 사용하기 (0) | 2023.07.26 |
TIL 230720 : ResponseEntity로 응답 메시지 보내기 (0) | 2023.07.24 |
TIL 230703 : JPA Buddy라는 것이 이 세상에 있었다 (0) | 2023.07.03 |
TIL 230630 : (이어서) Entity반환시 문제. (Dto의 중요성) (0) | 2023.06.30 |