Spring Boot「16」自定义错误页面
Spring Boot 中提供了一个 ErrorController 接口的一个基本实现 BasicErrorController。当我们访问 /error 或访问其他的 URL 遇到错误时,请求会路由到 BasicErrorController 中处理。今天我们将来学习下如何通过配置来调整 BasicErrorController 的行为。
01-Whitelabel Error Page
Spring Boot 提供了一个错误页面 /error,当使用 REST 访问时,会得到如下的响应:
当使用浏览器访问,得到如下的页面:
可以在 application.properties 中增加server.error.whitelabel.enabled=false
来关闭这个功能。关闭后,浏览器访问 /error 得到的是 Web 容器提供的错误界面,例如 Tomcat 提供的:
Whitelabel error page 是通过 BasicErrorController 来提供的,而后者是通过 ErrorMvcAutoConfiguration 自动配置类自动初始化的。所以,以下两种方式也可以实现上述关闭 whitelabel 的效果:
application.properties 中增加
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration
@SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class})
如何显示自定义的 Whitelabel error page?
如果我们使用 Thymeleaf 作为模板引擎,可以在 resources/templates 下新增 error.html,且其内容为:
当我们运行后,再次访问 /error 可以得到下面自定义的页面:
02-自定义 ErrorController
按照上节中介绍的方法,我们可以调整错误页面的格式。如果需要修改遇到错误时的处理逻辑,我们可以通过继承 BasicErrorController 的方式实现自己的错误处理器。例如:
当我们通过@Controller
将自定义错误处理类注册到容器中时,会阻止 ErrorMvcAutoConfiguration 中对默认 BasicErrorController 的初始化。
版权声明: 本文为 InfoQ 作者【Samson】的原创文章。
原文链接:【http://xie.infoq.cn/article/96f5b0c807edd3f093ab849ad】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论