[Spring] RestControllerAdvice 를 통한 전역 exception handling

jomminii·2022년 9월 5일
1

side-blog-v1

목록 보기
3/4

이전글 🔗 [Spring] 공통 response DTO 만들기
다음글 🔗 [Spring] ServiceException 기능 개발

이번에는 전역으로 에러를 처리해주는 기능을 만들어보겠습니다.
전역처리를 위해서 @RestControllerADvice 를 적용한 에러처리용 클래스를 하나 만들겠습니다.

@RestControllerAdvice
public class ApiExceptionHandler {

    @ExceptionHandler
    public ResultDTO<Object> handleException(Exception exception) {
        return ResultDTO.ofFail(exception.getMessage());
    }
}

@RestControllerAdvice@ControllerAdvice@ResponseBody를 조합해서 만든 편의성 annotation 인데요, 기본적으로 전역의 @Controller 클래스들에 적용되어 @ExceptionHandler와 같이 공통적으로 처리할 로직이 있을 때 사용됩니다.

기본적으로는 전역에 적용되나 @RestControllerAdvice(basePackages = xx) 등으로 값을 지정해주면 특정 범위에 적용시킬 수도 있습니다.

문서를 참고해보세요!

@ExceptionHandler의 경우 각각의 Controller 내에 위치시켜 특정 Controller 에만 적용되게도 할 수 있습니다.

요런 식으로요!

@RestController
@RequestMapping("/api/v1/boards")
public class BoardRestController {

    @GetMapping("")
    public ResultDTO<Object> exceptionTest() throws Exception {
        throw new Exception("error test");
//        return ResultDTO.ofFail("실패!!");
    }

    @ExceptionHandler(Exception.class)
    public ResultDTO<Object> handlerException(Exception exception) {
        return ResultDTO.ofFail("이게 먼저다!");
    }

이렇게 각각의 controller 안에 @ExceptionHandler를 위치시키면 @ControllerAdvice를 통해 만든 것보다 우선순위로 적용되어 exception 처리를 특화시킬 수 있습니다.

참고

controller advice - spring doc

profile
고민은 격렬하게, 행동은 단순하게

0개의 댓글