Spring Boot - 예외처리

업데이트:


스프링 부트 활용

Spring Web MVC 9부 : ExceptionHandler

스프링 부트가 지원하는 스프링 MVC ExceptionHandler에 대해 알아보자.

스프링 @MVC 예외처리 방법

  • @RestControllerAdvice, @ExceptionHandler

  • 스프링 부트 앱을 실행하면 기본적으로 BasicErrorController에서 제공하는 에러 핸들러가 등록되어 있다. (화이트 라벨 페이지)

  • 아래와 같이 컨트롤러 클래스 내부에 선언된 @ExceptionHandler는 해당 클래스에서 발생하는 예외만 처리할 수 있다.

  • 애플리케이션 전역에서 발생하는 예외를 @ExceptionHandler로 처리하고 싶으면, @RestControllerAdvice의 클래스를 생성하고 그 클래스에 @ExceptionHandler들을 정의하여 사용할 수 있다.

    @RestController
    public class SampleController {
      
        @GetMapping("/hello")
        public String hello() {
            throw new SampleException();
        }
      
        @ExceptionHandler(SampleException.class)
        public ResponseEntity<AppError> sampleError(SampleException e) {
            AppError appError = new AppError();
            appError.setMessage("error.app.key");
            appError.setReason("error test");
            return ResponseEntity.ok(appError);
        }
    }
    
    public class SampleException extends RuntimeException {
    }
    

스프링 부트가 제공하는 기본 예외 처리기

  • BaseErrorController : HTMLJSON 응답을 지원한다.

  • ErrorController를 구현하여 커스터마이징 할 수 있다.

    @Controller
    @RequestMapping("${server.error.path:${error.path:/error}}")
    public class BasicErrorController extends AbstractErrorController {
      ...
    }
    

커스텀 에러 페이지

  • 상태 코드 값에 따라 원하는 페이지를 간단하게 보여 줄 수 있다.
  • resources/static/error 디렉토리에 상태코드의 .html을 만들면 해당 상태코드에 따라 페이지를 보여준다.
    • 404.html, 5xx.html
  • ErrorViewResolver 구현

댓글남기기