- SpringBoot在AutoConfigure的web/servlet/error中自动定义了错误页面,SpringBoot会自动到模板目录和资源目录下查找有没有和状态码同名的视图或静态资源,如果有就自动加载,如果没有就使用SpringBoot默认的错误页面。
- 当系统出错时SpringBoot自动会请求/error请求,可以通过server.error.path属性修改错误请求路径
- 我们可以在模板或资源路径下定义一个error目录,将我们自定义的错误状态码同名的页面放入此目录中,SpringBoot就可以自动加载我们自定义的错误页面。
比如服务器有个404错误,SpringBoot会已一下顺序查找错误页面
- SpringBoot会自动查找templates/error/404.ftl,如果没有继续往下查找。
- SpringBoot 会自动查找static/error/404.html,如果没有继续往下查找。
- StringBoot会自动查找templates/error/4xx.ftl(模糊查找),如果没有继续往下查找。
- SpringBoot会自动查找static/error/4xx.html(模糊查找),如果没有SpringBoot会返回默认的错误页面。
注意:如果配置了模板引擎,SpringBoot会先去查找模板里面的错误页面,否则不会查找模板路径下的错误页面。
在模板错误页面中可以直接获取一下错误信息:
- timestamp:时间戳
- status:状态码
- error:错误提示
- exception:异常对象
- message:异常信息
- errors:JSR303数据校验出现的错误
如果要自定义返回错误信息,可以继承ErrorAttributes接口或者DefaultErrorAttributes类,然后将自定义的类加入容器中
package com.example.springboot.error;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.WebRequest;
import java.util.Map;
/**
* 自定义添加错误信息
*/
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
@Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> errorAttributes = super.getErrorAttributes(webRequest, includeStackTrace);
//自定义错误信息
errorAttributes.put("projectName", "Hello Word");
return errorAttributes;
}
}