- 默认情况下,Spring Boot 提供了一个 /error 映射,以合理的方式处理所有错误,并将其注册为 servlet 容器中的“全局”错误页面。
- 对于机器客户端,它会生成包含错误详细信息、HTTP 状态和异常消息的 JSON 响应。对于浏览器客户端,有一个错误视图,它以 HTML 格式呈现相同的数据(要自定义它,添加一个解决错误的视图)
- 如果要自定义默认错误处理行为,可以设置许多 server.error 属性。
- 如果要为给定状态代码显示自定义 HTML 错误页面,可以将文件添加到 /error 目录。错误页面可以是静态 HTML(即添加到任何静态资源目录下)或使用模板构建。文件的名称应该是确切的状态代码或系列掩码。
- 如果要将 404 映射到静态 HTML 文件,目录结构将如下所示:
src/
main/
java/
resources/
static/
error/
404.html
- 要使用 FreeMarker 模板映射所有 5xx 错误,您的目录结构如下
src/
main/
java/
resources/
templates/
error/
5xx.ftlh
自定义错误界面
- 对于更复杂的映射,还可以添加实现 ErrorViewResolver 接口的 bean
示例
public class MyErrorViewResolver implements ErrorViewResolver {
@Override public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { // Use the request or status to optionally return a ModelAndView if (status == HttpStatus.INSUFFICIENT_STORAGE) { // We could add custom model values here new ModelAndView("myview"); } return null; }
} |
- 对于不使用Spring MVC的应用,可以使用ErrorPageRegistrar接口直接注册ErrorPages。这种抽象直接与底层嵌入式 servlet 容器一起工作,即使您没有 Spring MVC DispatcherServlet 也能工作
示例
@Configuration(proxyBeanMethods = false) public class MyErrorPagesConfiguration {
@Bean public ErrorPageRegistrar errorPageRegistrar() { return this::registerErrorPages; }
private void registerErrorPages(ErrorPageRegistry registry) { registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400")); }
} |