Springboot默认的错误页是如何工作及工作原理你肯定不知道?

2023年 8月 21日 41.5k 0

环境:Springboot2.4.12

环境配置

接下来的演示都是基于如下接口进行。

@RestController
@RequestMapping("/exceptions")
public class ExceptionsController {
    
  @GetMapping("/index")
  public Object index(int a) {
    if (a == 0) {
      throw new BusinessException() ;
    }
    return "exception" ;
  }
    
}

默认错误输出

默认情况下,当请求一个接口发生异常时会有如下两种情况的错误信息提示

  • 基于HTML

图片图片

  • 基于JSON

图片图片

上面两个示例通过请求的Accept请求头设置希望接受的数据类型,得到不同的响应数据类型。

标准web错误页配置

在标准的java web项目中我们一般是在web.xml文件中进行错误页的配置,如下:


  /error

如上配置后,如发生了异常以后容器会自动地跳转到错误页面。

Spring实现原理

在Springboot中没有web.xml,并且Servlet API也没有提供相应的API进行错误页的配置。那么在Springboot中又是如何实现错误页的配置呢?

Springboot内置了应用服务,如Tomcat,Undertow,Jetty,默认是Tomcat。那接下来看下基于默认的Tomcat容器错误页是如何进行配置的。

  • Servlet Web服务自动配置
@EnableConfigurationProperties(ServerProperties.class)
@Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,...})
public class ServletWebServerFactoryAutoConfiguration {
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ Servlet.class, Tomcat.class, UpgradeProtocol.class })
@ConditionalOnMissingBean(value = ServletWebServerFactory.class, search = SearchStrategy.CURRENT)
static class EmbeddedTomcat {

// 这里主要就是配置Web 容器服务,如这里使用的Tomcat
// 注意该类实现了ErrorPageRegistry ,那么也就是说该类可以用来注册错误页的
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory(
ObjectProvider connectorCustomizers,
ObjectProvider contextCustomizers,
ObjectProvider

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论