SpringBoot 错误处理
SpringBoot 默认错误机制,返回一个错误页面和 json数据
- 浏览器
- 其它客户端
1. 原理
源码 ErrorMvcAutoConfiguration
其中有几个重要的组件:
-
DefaultErrorAttributes
: 共享信息timestamp
时间status
状态码error
错误提示exception
异常对象message
异常信息errors
JSR303 数据校验的信息
-
DefaultErrorViewResolver
@Override public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) { ModelAndView modelAndView = resolve(String.valueOf(status.value()), model); if (modelAndView == null && SERIES_VIEWS.containsKey(status.series())) { modelAndView = resolve(SERIES_VIEWS.get(status.series()), model); } return modelAndView; } private ModelAndView resolve(String viewName, Map<String, Object> model) { String errorViewName = "error/" + viewName; //使用模板引擎 TemplateAvailabilityProvider provider = this.templateAvailabilityProviders.getProvider(errorViewName, this.applicationContext); if (provider != null) { return new ModelAndView(errorViewName, model); } //没有模板引擎 自动在静态资源下面去找 return resolveResource(errorViewName, model); }
-
ErrorPageCustomizer
: 自定义 -
BasicErrorController
: 处理 /error 请求@Controller @RequestMapping("${server.error.path:${error.path:/error}}") public class BasicErrorController extends AbstractErrorController { //html 浏览器 @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView