https://www.baeldung.com/spring-boot-custom-error-page/ 를 번역함.
1. 개요
이 기사에서는 적절한 오류 처리가 전문성과 품질 작업을 나타내므로 Spring Boot 애플리케이션의 기본 오류 페이지 를 비활성화하고 사용자 정의하는 방법을 살펴볼 것입니다.
2. 화이트 라벨 오류 페이지 비활성화
먼저 server.error.whitelabel.enabled 속성을 false 로 설정하여 화이트 라벨 오류 페이지를 완전히 비활성화하는 방법을 살펴보겠습니다 .
server.error.whitelabel.enabled=false
이 항목을 application.properties 파일에 추가하면 오류 페이지가 비활성화되고 기본 응용 프로그램 컨테이너(예: Tomcat)에서 시작된 간결한 페이지가 표시됩니다.
ErrorMvcAutoConfiguration 빈 을 제외하면 동일한 결과를 얻을 수 있습니다 . 속성 파일에 이 항목을 추가하여 이를 수행할 수 있습니다.
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration
#for Spring Boot 2.0
#spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
또는 이 주석을 기본 클래스에 추가하여:
@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})
위에서 언급한 모든 방법은 화이트 라벨 오류 페이지를 비활성화합니다. 그러면 누가 실제로 오류를 처리하는지에 대한 질문이 남습니다.
위에서 언급했듯이 일반적으로 기본 응용 프로그램 컨테이너입니다. 좋은 점은 모든 기본값 대신 사용자 정의 오류 페이지를 표시하여 항목을 추가로 사용자 정의할 수 있다는 것입니다. 이것이 다음 섹션의 초점입니다.
3. 사용자 정의 오류 페이지 표시
먼저 사용자 정의 HTML 오류 페이지를 만들어야 합니다.
Thymeleaf 템플릿 엔진을 사용 하고 있으므로 파일을 error.html 로 저장합니다 .
<!DOCTYPE html>
<html>
<body>
<h1>Something went wrong! </h1>
<h2>Our Engineers are on it</h2>
<a href="/">Go Home</a>
</body>
</html>
이 파일을 resources/templates 디렉토리 에 저장 하면 기본 Spring Boot의 BasicErrorController에 의해 자동으로 선택됩니다 .
이것이 사용자 정의 오류 페이지를 표시하는 데 필요한 전부입니다. 몇 가지 스타일을 지정하면 이제 사용자에게 훨씬 더 보기 좋은 오류 페이지가 표시됩니다.
우리는 우리가 그것으로 파일 저장 예 사용하고자하는 HTTP 상태 코드와 파일 이름을 지정하여보다 구체적인 될 수 있습니다 으로 404.html 에서 resources/templates/error 는 404 오류를 명시 적으로 사용됩니다 수단입니다.
3.1. 커스텀 ErrorController
지금까지의 한계는 오류가 발생했을 때 사용자 정의 논리를 실행할 수 없다는 것입니다. 이를 달성하기 위해 기본 빈을 대체할 오류 컨트롤러 빈을 생성해야 합니다.
이를 위해 우리는 ErrorController 인터페이스 를 구현하는 클래스를 생성해야 합니다 . 또한 오류가 발생했을 때 호출할 사용자 지정 경로를 반환 하도록 server.error.path 속성 을 설정해야 합니다.
@Controller
public class MyErrorController implements ErrorController {
@RequestMapping("/error")
public String handleError() {
//do something like logging
return "error";
}
}
위의 스니펫에서 @Controller로 클래스에 주석을 달고 server.error.path 속성으로 지정된 경로에 대한 매핑을 생성합니다 .
server.error.path=/error
이 방법으로 컨트롤러는 /error 경로 에 대한 호출을 처리할 수 있습니다 .
에서 는 handleError () , 우리는 우리가 이전에 만든 사용자 지정 오류 페이지를 반환합니다. 지금 404 오류가 발생하면 표시될 사용자 정의 페이지입니다.
다양한 오류 유형에 대한 특정 오류 페이지를 표시 하도록 handleError() 를 더욱 개선해 보겠습니다 .
예를 들어, 404 및 500 오류 유형에 맞게 특별히 디자인된 페이지를 가질 수 있습니다. 그런 다음 오류의 HTTP 상태 코드를 사용하여 표시할 적절한 오류 페이지를 결정할 수 있습니다.
@RequestMapping("/error")
public String handleError(HttpServletRequest request) {
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if (status != null) {
Integer 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";
}
그런 다음 예를 들어 404 오류의 경우 error-404.html 페이지가 표시됩니다.
4. 결론
이 정보를 통해 이제 오류를 보다 우아하게 처리하고 사용자에게 미적 페이지를 표시할 수 있습니다.
항상 그렇듯이 전체 소스 코드는 Github에서 사용할 수 있습니다 .