目录
SpringBoot版本:2.1.1
默认情况下,Spring Boot异常页面显示如下:
下面第一句:此应用程序没有针对/error的显式映射。
默认异常处理
Spring Boot提供了一个处理所有异常的映射 “ /error ”,并将其注册为容器中的“全局”异常页面,位于org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController。
对于计算机客户端(比如postman),它会生成一个JSON响应,其中包含错误,HTTP状态和异常消息的详细信息。
对于浏览器客户端,有一个默认的异常视图,它以HTML格式呈现相同的数据,就是上面的默认异常页面。
BasicErrorController
可以看到默认处理就是“/error”请求。有两个请求映射方法errorHtml()和error(),第一个方法是返回页面+数据,第二个方法是放回JSON。
返回页面+数据:errorHtml()
最终是调用DefaultErrorViewResolver的resolveErrorView方法创建ModelAndView 对象,如果返回的ModelAndView 为空,则显示的就是默认的异常页面。
@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView errorHtml(HttpServletRequest request,
HttpServletResponse response) {
//request.getAttribute("javax.servlet.error.status_code");如果为空则返回500
HttpStatus status = getStatus(request);
//得到异常信息,包括timestamp,status,error,message,path;
//具体可以到DefaultErrorAttributes的getErrorAttributes方法查看
Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(
request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));
//设置响应状态
response.setStatus(status.value());
//创建ModelAndView
ModelAndView modelAndVi