背景
对接的项目多了,奇奇怪怪的问题就都出现了,比如有一个最让人烦心的问题 异常。
偶尔会碰到框架抛出的默认的异常,比如 Laraval,比如 Spring Boot,每个框架抛出的异常格式是不一致的,有 Json 或 XML 格式的数据,更甚至有 HTML 页面,最为关键的是响应的数据结构和接口约定的数据结构不一致,所以这时候我们在对响应内容进行解析的时候反而会给我们自己的代码带来需要处理的异常。
基于此,为了对自己的接口负责,我们需要进行全局的异常处理,目的是防止出现约定之外的数据结构。
Spring Boot 默认的异常处理机制
默认情况下,Spring Boot 会返回两种类型的异常,一种是 HTML,还有一种是 Json 格式的数据,这主要取决于请求头中的 Accept 参数,比如浏览器发出的请求,请求头中会附带 Accept:text/html,所以此时 Spring Boot 会返回一个错误页面,称为 Whitelabel Error Page,而当我们使用 Postman 请求时,返回的则是 Json 类型的数据。
原理其实也很简单,Spring Boot 默认提供了程序出错的结果映射路径 /error。而这个 /error 请求会由 BasicErrorController 来处理,其内部