개발강의정리/Spring

[스프링 부트 개념과 활용] 4-9. 스프링 웹 MVC 9부: ExceptionHandler

nineDeveloper 2019. 11. 13.
728x90

스프링 부트 개념과 활용

4. 스프링 부트 활용

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/springboot-concept-uses/tree/chap04-09-09-mvc-exceptionhandler

 

freespringlecture/springboot-concept-uses

백기선님의 스프링 부트 개념과 활용 강의 내용 정리. Contribute to freespringlecture/springboot-concept-uses development by creating an account on GitHub.

github.com

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

스프링 부트 개념과 활용 - 인프런

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다. 중급 프레임워크 및 라이브러리 Spring Spring Boot 온라인 강의

www.inflearn.com

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

9. 스프링 웹 MVC 9부: ExceptionHandler

SpringBoot에는 ErrorHandler가 이미 등록되어있음
ErrorHandler에 의해서 Error 메세지들이 보임

기본 @ExceptionHandler 테스트 코드

해당 된 컨트롤러 내에서만 동작하는 ExceptionHandler 테스트 코드

SampleController

@Controller
public class SampleController {

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

    // AppError: App에서 만든 커스텀한 에러정보를 담고 있는 클래스가 있다면
    @ExceptionHandler(SampleException.class)
    //메서드 파라메터로 해당하는 Exception 정보를 받아 올 수 있음
    public @ResponseBody AppError sampleError(SampleException e) {
        AppError appError = new AppError();
        appError.setMessage("error.app.key");
        appError.setReason("IDK IDK IDK");
        return appError;
    }
}

SampleException

public class SampleException extends 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;
    }
}

스프링 @MVC 예외 처리 방법

  • @ControllerAdvice

ExceptionHandler 정의하면 여러 컨트롤러에서 발생하는 Exception을 처리하는 Handler가 동작하게 됨

  • @ExchangepHandler

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

  • BasicErrorController

상속받아서 메서드를 오버라이딩해서 구현하는 것을 레퍼런스에서 추천함
HTML로 요청하면 HTML로 응답하고 그 외에는 JSON으로 응답함

  • HTML과 JSON 응답 지원
  • 커스터마이징 방법
    • ErrorController 구현

커스텀 에러 페이지

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling-custom-error-pages

상태코드 값에 따라 다른 에러페이지 보여주기

에러 페이지 명

경로: src/main/resources/public/error/
경로에 상태코드와 동일한 에러페이지를 만들어야 동작함 아니면 첫번째 숫자만 명시해서 만들어도 됨

  • 404.html
  • 5xx.html
  • ErrorViewResolver 구현
728x90

댓글

💲 추천 글