[Spring Boot] 스프링 웹 MVC - ExceptionHandler

dsunni·2020년 8월 6일
0

스프링 부트 애플리케이션에는 기본적으로 에러 핸들러가 있어 에러 메시지를 확인할 수 있다.

image



1. 스프링 @MVC 예외 처리 방법

Controller

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

    @ExceptionHandler(SampleException.class)
    public @ResponseBody AppError sampleError(SampleException e) {
        AppError appError = new AppError();
        appError.setMessage("error.app.key");
        appError.setReason("IDK IDK IDK");

        return appError;
    }
}
  • @ExceptionHandler : 컨트롤러 안에서 발생하는 SampleException 에러를 처리하기 위한 핸들러를 사용하겠다고 선언
  • @ResponseBody : JSON 타입으로 리턴

AppError.java

package me.dsunni;

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;
    }
}
image-20200806183929396

localhost:8080으로 들어가보면 에러메시지 확인 가능하다.


위 ExceptionHandler은 해당 컨트롤러 안에서만 사용가능하다.

만약 전역적으로 ExceptionHandler을 사용하고 싶으면 따로 Class를 생성하고 그 클래스 위에 @ControllerAdvice를 붙이고 안에 ExceptionHandler을 정의하면 여러 클래스에서 발생하는 에러 처리가 가능하다.



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

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


3. 커스텀 에러 페이지

image

Error 응답의 상태값에 따라 다른 에러 페이지를 보여주고 싶을 때 resources - static 또는 templates 에 상태값을 이름으로 html파일들을 만들면된다.

profile
https://dsunni.tistory.com/ 이사갑니답

0개의 댓글