IT모저모

[Springboot] 400에러페이지 설정하기 본문

Develop/SpringBoot

[Springboot] 400에러페이지 설정하기

YU JIN 2023. 7. 5. 11:01
반응형

안녕하세요.

개발하다보면 400, 500, 404 페이지를 보게 되는 경우가 많습니다.

스프링 부트에서는

화이트라벨 에러 페이지로 에러를 리턴해주죠?

하지만 http코드에 맞는 에러페이지를 리턴해주는 것이 좋습니다.

 

그러므로 404 NOT FOUND 리턴을 해보겠습니다.

 

구성환경

Springboot 3.0

Java 17

maven

Thymeleaf

Mac OS

 

application.properties
# server
server.port=8080
server.error.whitelabel.enabled=false

application.properties 파일에 상단에 이미지의 화이트라벨 페이지를 사용하지 않는다고 선언해주어야합니다.

false로 선언해줄게요.

 

에러 컨트롤러(ErrorHandling) 생성

기본적으로 Springboot는 모든 에러를 적절한 방식으로 처리하는 mapping을 제공하고 있어요.

그래서 에러 페이지를 관리할 컨트롤러를 생성해야합니다.

 

package com.example.demo.Controller;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.http.HttpServletRequest;
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;


@Controller
public class ErrorHandling implements ErrorController {

    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/404";
            }else if(statusCode != HttpStatus.INTERNAL_SERVER_ERROR.value()){
                return "error/500";
            }
        }
        return "error/normal";
    }
}
  • 원하는 이름으로 컨트롤러를 생성합니다. 저의 경우는 ErrorHandling!
  • ErrorController 인터페이스를 상속(implements) 받습니다.
  • @Controller 어노테이션을 붙여줍니다.
  • getErrorPath () 메서드를 재정의하여 오류 발생시 호출 할 사용자 지정 경로(에러페이지)를 지정합니다.
    server.error.path 속성(/error)을 사용하여 사용자 지정 경로(에러페이지)를 지정하도록 합니다.
getErrorPath () 메서드는 아직 ErrorController 인터페이스에서 완전히 제거되지 않았기 때문에, 재정의는 필수입니다.
그렇지만, 해당 코도는 무시가 될 것이므로
 null을 반환하도록 합니다!!
  • 저는 Thymeleaf를 사용하고 있으므로 아래 경로에서 error 페이지들을 관리해주고 있어요.
  • 원하시는 경로에 설정하시면 됩니다.
  • 저는 에러 페이지를 따로 구성하기보다는 만들어진 페이지를 이용했어요. (ex: https://freefrontend.com/500-error-page-html-templates/)

 

 

 

짜잔 결과물을 확인하실 수 있습니다.

감사합니다.

Comments