프로그래밍에서 예외 처리는 아주 중요하면서도 아주 어렵다.
과하다할 만큼 상세하고 다양하게 예외를 잡아 처리해준다면, 클라이언트도 그렇고 서버도 그렇고 더 안정적인 프로그램이 될 수 있게 도와준다.
@Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메소드에서 처리해주는 기능
@RestController
@RequestMapping("/")
public class MainController {
...
@ExceptionHandler({NullPointerException.class})
public Object nullEx(Exception e) {
...
return "userService";
}
@ControllerAdvice("com.task.controller")
public class ExceptionHandlers {
@ExceptionHandler({NullPointerException.class})
public Object nullEx(Exception e) {
...
return "userService";
}
}
@ControllerAdvice + @ResponseBody → @RestControllerAdvice
RuntimeException를 상속받은 클래스를 생성
필요 시 생성자로 받을 변수 선언
@Getter
@AllArgsConstructor
public class CustomException extends RuntimeException {
private final ErrorCode errorCode;
}
사용 시 일반적인 Exception 처럼 사용 가능
throw new CustomException(ErrorCode.ERROR)
@ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리, 통합하기(Spring에서 예외 관리하는 방법, 실무에서는 어떻게?) - 기본기를 쌓는 정아마추어 코딩블로그
[스프링부트] @ExceptionHandler를 통한 예외처리 - Help!