Spring Boot 2.X 自定义错误页面
【摘要】
在项目中我们遇到404找不到的错误、或者500服务器错误,都需要配置相应的页面给用户一个友好的提示。
Spring Boot 2.X 为我们提供了下面 3 种方法实现这个功能。
实现 ErrorCon...
在项目中我们遇到404找不到的错误、或者500服务器错误,都需要配置相应的页面给用户一个友好的提示。
Spring Boot 2.X 为我们提供了下面 3 种方法实现这个功能。
实现 ErrorController 接口
在 Spring Boot 中,我们可以通过实现 ErrorController 接口,重写 handleError 方法,可以将错误重定向到预先放置在 static 目录下定义的静态 html 网页上。
@Controller
public class MyErrorController implements ErrorController {
private static final String ERROR = "/error";
private static final String ERROR_400 = "/400";
private static final String ERROR_500 = "/500";
@GetMapping(ERROR)
public String handleError(HttpServletRequest request) {
Enumeration<String> names = request.getAttributeNames();
System.out.println(Arrays.toString((Collections.list(names).toArray(new String[0]))));
Integer statusCode = (Integer)request.getAttribute("javax.servlet.error.status_code");
if(statusCode >= 400 && statusCode < 500) {
return ERROR_400;
} else {
return ERROR_500;
}
}
@Override
public String getErrorPath() {
return ERROR;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
实现 ErrorPageRegistrar 接口
这个接口就有点麻烦了,需要对每种状态码进行配置。虽然可以将所有的状态码,都重定向到同一个页面,然后在 @Controller 中,再对它们做重定向,可还是很麻烦。
@Configuration
public class MyErrorRegistrar implements ErrorPageRegistrar {
private static final String ERROR_404 = "/400.html";
private static final String ERROR_500 = "/500.html";
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
System.out.println("ErrorPageRegistrar registerErrorPages");
ErrorPage[] errorPages = new ErrorPage[2];
errorPages[0] = new ErrorPage(HttpStatus.NOT_FOUND, ERROR_404);
errorPages[1] = new ErrorPage(HttpStatus.GATEWAY_TIMEOUT, ERROR_500);
registry.addErrorPages(errorPages);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
配置嵌入式Servlet容器
ConfigurableWebServerFactory 用的也是 ErrorPage,跟之前一样
@Configuration
public class MyServerFactory {
@Bean
public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() {
return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() {
private static final String ERROR_404 = "/400.html";
private static final String ERROR_500 = "/500.html";
@Override
public void customize(ConfigurableWebServerFactory factory) {
ErrorPage[] errorPages = new ErrorPage[2];
errorPages[0] = new ErrorPage(HttpStatus.NOT_FOUND, ERROR_404);
errorPages[1] = new ErrorPage(HttpStatus.GATEWAY_TIMEOUT, ERROR_500);
factory.addErrorPages(errorPages);
factory.setPort(8080);
}
};
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/chy555chy/article/details/100034803
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)