默认的异常页
浏览器客户端 发生error
500报错 (text/html页面)
404报错 (text/html页面)
Postman 报错
500报错 (Json数据)
404报错 (Json数据)
源码
org.springframework.boot.autoconfigure ->
web ->
servlet ->
error -> ErrorMvcAutoConfiguration
在配置类ErrorMvcAutoConfiguration
中,由其注解可知
@EnableConfigurationProperties({ ServerProperties.class, WebMvcProperties.class })
可以在配置文件中通过其前缀来修改该异常配置类的配置。
该配置类中的两个Bean可以看出,第一个errorAttributes
为错误属性;
basicErrorController
为控制器,来处理请求。
@Bean
@ConditionalOnMissingBean(value = ErrorAttributes.class, search = SearchStrategy.CURRENT)
public DefaultErrorAttributes errorAttributes() {
return new DefaultErrorAttributes();
}
@Bean
@ConditionalOnMissingBean(value = ErrorController.class, search = SearchStrategy.CURRENT)
public BasicErrorController basicErrorController(ErrorAttributes errorAttributes,
ObjectProvider<ErrorViewResolver> errorViewResolvers) {
return new BasicErrorController(errorAttributes, this.serverProperties.getError(),
errorViewResolvers.orderedStream().collect(Collectors.toList()));
}
在BasicErrorController
中,可以看到使用了注解@Controller
和@RequestMapping
@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
而在之前的错误信息中,发送的请求是/error
所以BasicErrorController
就是来处理/error
请求的。
BasicErrorController
中标注了@RequestMapping
的方法,第一个(用于浏览器端):
第二个(Psotman机器客户端):
在ErrorMvcAutoConfiguration
的源码中,类WhitelabelErrorViewConfiguration
中配置了默认错误页面。
protected static class WhitelabelErrorViewConfiguration {
......
}
当发起错误请求,没有自定义异常来处理,则由BasicErrorController来处理,会检测媒体类型,如果是html页面,没有自定义的错误页面,就会使用默认配置的html页面;若是Postman等机器客户端发起的错误请求,则响应一个Json数据(return new ResponseEntity<>(body,status)
)。