반응형
웹 서비스를 개발하면서 404, 500 에러 등 많은 에러가 발생하고 각각의 에러에 맞는 화면을 보게 됩니다.
해당 글에서는 에러가 발생하면 해당 에러에 맞는 에러 페이지를 보여주도록 설정해보도록 하겠습니다.
개발환경은 아래와 같습니다.
- SpringBoot : 2.4.4
- Java8
- thymeleaf
SpringBoot에서 간단하게 에러페이지를 설정해보도록 하겠습니다.
1. 에러페이지를 관리할 Controller를 생성하여 ErrorController 인터페이스를 상속받아 에러 컨트롤러를 생성합니다.
2. error 페이지를 만듭니다.
1. 에러컨트롤러 생성(CustomErrorController)
- 기본적으로 Spring Boot는 모든 Error를 적적한 방식으로 처리하는 /error 로 맵핑을 제공하고 있으며, servlet container에서 global 에러 페이지로 등록됩니다.
- Error 페이지를 관리할 컨트롤러를 생성합니다.
package com.study.jaewonstudy.webservice.web;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
@Controller
public class WebErrorController implements ErrorController {
@Override
public String getErrorPath() {
return null;
}
@GetMapping("/error")
public String handleError(HttpServletRequest request) {
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if(status != null){
int statusCode = Integer.valueOf(status.toString());
if(statusCode == HttpStatus.NOT_FOUND.value()) {
return "error/404error";
} else {
return "error/error";
}
}
return "error/error";
}
}
- 원하시는 이름으로 컨트롤러를 생성하고, ErrorContorller 인터페이스를 상속(implements)받습니다.
- getErrorPath () 메서드를 재정의하여 오류 발생시 호출 할 사용자 지정 경로(에러페이지)를 지정합니다.
그러나 버전 SpringBoot 2.3.x부터 이 방법을 사용하지 않으며 대신 server.error.path 속성(/error)을 사용하여 사용자 지정 경로(에러페이지)를 지정하도록 합니다.
참고!!!
getErrorPath () 메서드는 아직 ErrorController 인터페이스에서 완전히 제거되지 않았기 때문에, 재정의는 필수입니다.
그렇지만, 해당 코도는 무시가 될 것이므로 null을 반환하도록 합니다.
- @Controller로 해당 클래스에 어노테이션을 추가하고, /error 경로로 매핑을 하여 에러에 대한 호출을 처리하도록 합니다.
- request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE) 는 /error로 들어온 에러의 status를 불러오도록 합니다. (ex: 404, 500, 403 ...)
- 기본적으로 제일 많이 사용되는 404에러는 404에러페이지로, 이외 나머지 에러는 기본 에러페이지로 이동하도록 합니다.
- return 경로는 에러페이지를 생성한 경로로 작성합니다.
2. 에러페이지 생성하기
- 해당 글에서는 thymeleaf를 사용하고 있으므로, resource - templates - error 아래에 html 파일을 생성하도록 하겠습니다.
- 각각의 원하시는 에러페이지를 생성하시거나, 찾아서 페이지를 등록합니다.(ex: https://freefrontend.com/500-error-page-html-templates/)
참고
반응형
'BackEnd > Spring' 카테고리의 다른 글
[Spring] 문자열 유효성 검사(isEmpty(),hasText()) (0) | 2022.07.03 |
---|---|
[Spring] @Component 어노테이션을 사용한 싱글톤패턴 유사 구현 (0) | 2022.01.16 |
[SpringBoot] Vue.JS + SpringBoot 연동하기 (12) | 2021.05.09 |
[SpringBoot] 웹서비스 출시하기(끝) - 7. Route 53을 사용한 Domain 등록 (0) | 2021.05.09 |
[SpringBoot] 웹서비스 출시하기 - 6. 운영 환경 설정하기 (0) | 2021.05.01 |