Skill/spring

404 커스텀 에러 페이지 설정

진열사랑 2022. 11. 17. 11:26

출처:https://dev-jwblog.tistory.com/m/47

0해당 글에서는 에러가 발생하면 해당 에러에 맞는 에러 페이지를 보여주도록 설정해보도록 하겠습니다.
 
개발환경은 아래와 같습니다.

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/)