이전글 🔗 [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 처리를 특화시킬 수 있습니다.