This example shows how to replace the default whitelabel error page with a custom Thymeleaf error page in Spring Boot.
Create a controller
@Controller
public class MyController {
@RequestMapping("/")
public void handleRequest() {
throw new RuntimeException("test exception");
}
}
A custom Thymeleaf error page
Spring Boot by default provides /error mapping where all exception/errors are forwarded. In case of Thymeleaf (or other template engines), we can map errors to a global custom template file by name 'error' under src/main/resources/templates/ directory.
src/main/resources/templates/error.html<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<style>
table td{
vertical-align:top;
border:solid 1px #888;
padding:10px;
}
</style>
</head>
<body>
<h1>My Thymeleaf Error Page</h1>
<table>
<tr>
<td>Date</td>
<td th:text="${timestamp}"/>
</tr>
<tr>
<td>Path</td>
<td th:text="${path}"/>
</tr>
<tr>
<td>Error</td>
<td th:text="${error}"/>
</tr>
<tr>
<td>Status</td>
<td th:text="${status}"/>
</tr>
<tr>
<td>Message</td>
<td th:text="${message}"/>
</tr>
<tr>
<td>Exception</td>
<td th:text="${exception}"/>
</tr>
<tr>
<td>Trace</td>
<td>
<pre th:text="${trace}"/>
</td>
</tr>
</table>
</body>
</html>
Spring Boot application.properties file
We are enabling the stacktrace to be included as expression attribute to our Thymeleaf view.
src/main/resources/application.propertiesserver.error.include-stacktrace=always
Main class
@SpringBootApplication
public class SpringBootMain extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBootMain.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringBootMain.class);
}
}
mvn spring-boot-run
Output
To try examples, run spring-boot maven plugin (configured in pom.xml of example project below):
mvn spring-boot:run
We can also run the main class from our IDE.
Accessing 'http:/localhost:8080/'
Accessing unmapped URL, say 'http:/localhost:8080/other'
Like our last example, deploying to Tomcat server or running the Boot executable war also works without an problems.
Example ProjectDependencies and Technologies Used: - Spring Boot 1.5.10.RELEASE
Corresponding Spring Version 4.3.14.RELEASE - spring-boot-starter-thymeleaf : Starter for building MVC web applications using Thymeleaf views.
Uses org.thymeleaf:thymeleaf-spring4 - JDK 1.8
- Maven 3.3.9
|