ABOUT ME

-

오늘
-
어제
-
-
  • SpringBoot - MVC ExceptionHandler
    Back-end/Spring 2020. 6. 27. 23:51

    ExceptionHandler

    기본적으로 등록되어있는 ErrorHandler가 메시지를 출력해주지만 직접 커스텀하여 에러 메시지를 출력할 수도 있습니다.

    ExceptionHandler

    위 사진이 기본적으로 등록된 에러 메시지입니다.

    ExceptionHandler

    curl 명령어로 보면 JSON 형식으로 오류가 나는 것을 확인 가능합니다.

    • BasicErrorController : 기본 예외 처리를 합니다.

    핸들러 실습 해보기

    Controller 클래스

    @Controller
    public class SampleController {
    
        @GetMapping("/hello")
        public String hello() {
            throw new SampleException();
        }
    }

     

    ExceptionHandler

    먼저 Hello 요청을 보낼 때 SampleException 클래스를 통해 에러메시지를 출력하기 위해 에러를 던집니다.

    SampleException 클래스

    ExceptionHandler

    RuntimeException을 상속받아 실행시 에러를 발생시키도록 합니다.

    AppError 클래스

    public class AppError {
    
        private String message;
    
        private String reason;
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public String getReason() {
            return reason;
        }
    
        public void setReason(String reason) {
            this.reason = reason;
        }
    }

     

    ExceptionHandler

    메시지와 에러 이유를 나타낼 수 있도록 변수 및 getter, setter를 선언합니다.

    Controller 클래스

    @Controller
    public class SampleController {
    
        @GetMapping("/hello")
        public String hello() {
            throw new SampleException();
        }
    
    
        // 메소드 파라미터로 해당하는 Exception 정보를 받아 올 수 있습니다.
        @ExceptionHandler(SampleException.class)
        public @ResponseBody AppError sampleError(SampleException e) {
        // AppError: App에서 만든 커스텀한 에러정보를 담고 있는 클래스를 생성합니다.
            AppError appError = new AppError();
            appError.setMessage("error.app.time");
            appError.setReason("timeOut");
            return appError;
        }
    }

     

    ExceptionHandler

    @ExceptionHandler를 활용하여 RuntimeException시 발생하는 에러를 커스텀 하기 위해 선언을 해줍니다.
    그리고 AppError클래스의 메시지, 에러이유를 정의해주고 return합니다.

    ExceptionHandler

    /hello 경로 이동시 직접 선언했던 에러 메시지가 출력됩니다.

    에러 페이지 커스텀하기

    • 참고 : 스프링공식문서
    • 경로 : src/main/resources/static/error/
    • 경로에 상태코드와 동일한 에러페이지를 만들어야 동작합니다. 혹은 첫 번째 숫자만 명시합니다.
    • 404.html
    • 5xx.html
    • ErrorViewResolver 구현

    ExceptionHandler

    경로에 404에러 및 5xx에러 발생시 나타내는 페이지를 커스텀 합니다.

    ExceptionHandler

    Root로 접근했을 경우 따로 페이지가 없기 때문에 404에러가 발생하여 커스텀한 페이지가 출력된 것을 확인할 수 있습니다.

    'Back-end > Spring' 카테고리의 다른 글

    SpringBoot - MVC CORS  (0) 2020.06.27
    SpringBoot - MVC HATEOAS  (0) 2020.06.27
    SpringBoot - MVC HtmlUnit  (0) 2020.06.27
    SpringBoot - MVC Thymeleaf  (0) 2020.06.27
    SpringBoot - MVC Index, Favicon(인덱스, 파비콘)  (0) 2020.06.27

    댓글