스프링 부트 활용

ExceptionHandler

   스프링 부트에는 기본적으로 error handler가 들어가 있다.

index페이지가 없을 때 localhost:8080으로 요청 시 보이는 화면(Whitelabel Error Page)이 기본 error handler가 처리해준 결과이다.


기본 error handling 로직은 BasicErrorController에 들어있다.

@MVC 예외 처리 방법

    Error를 테스트 하기 위해 Controller를 만들어준다. Controller에서 /hello 요청이 왔을 때 Error를 던지게 한다.

@Controller
public class SampleController {

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

}

SampleException이라는 클래스를 만들어 RuntimeException을 던지도록 해준다.(extends RuntimeException)

package com.gracenam.springbooterrorhandler;

public class SampleException extends RuntimeException {

}

그 후, 이 앱에 특화되어 있는 error 정보를 담고 있는 커스텀 클래스를 만들어주자.

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를 사용하여 SampleException이 발생할 때 쓰는 error handler를 만들어준다.

@Controller
public class SampleController {

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

  @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;
  }

}

이제 /hello 요청을 하면 만들어준 error hanlder가 정상 작동하는 것을 확인할 수 있다.


커스텀 에러 페이지

   error 발생 시, status 코드 값에 따라 다른 웹 페이지를 보여주는 것이다.

/src/main/resources/static 또는 /src/main/resources/templates에 error라는 디렉토리를 만들고, ‘상태코드 값.html’ 파일을 만들어준다.(상태 코드 값은 완전히 같게 하거나, 5xx 처럼 앞자리만 표시해줘도 된다.)


Reference