伊春网站建设公司,网站建设内容方法,全国拿货最便宜的网站,网络系统图标无法打开错误处理机制#xff1a;
访问一个不存在的页面时#xff0c;或者程序抛出异常时
默认效果
浏览器返回一个错误的页面#xff0c;注意查看浏览器发送请求的请求头可以使用专业的软件比如postman分析返回的json数据
springboot错误处理的自动配置信息
主要给日容器中注册…错误处理机制
访问一个不存在的页面时或者程序抛出异常时
默认效果
浏览器返回一个错误的页面注意查看浏览器发送请求的请求头可以使用专业的软件比如postman分析返回的json数据
springboot错误处理的自动配置信息
主要给日容器中注册了以下组件
ErrorPageCustomizer 系统出现错误以后来到error请求进行处理相当于web.xml注册的错误页面规则BasicErrorController 处理/error请求DefaultErrorViewResolver 默认的错误视图解析器DefaultErrorAttributes 错误信息defaultErrorView 默认错误视图getErrorAttributes返回的参数
timestamp时间戳status状态码error错误提示exception异常对象message异常消息errorsJSR303数据校验的错误都在这里
2.0以后默认是不显示exception的需要在配置文件中开启
server.error.include-exceptiontrue
如何定制JSON数据
springboot做了自适应效果浏览器访问响应错误页面。客户端访问响应错误信息的json数据 第一种方法定义全局异常处理器类注入到容器中捕获到异常返回json格式的数据 ControllerAdvice
public class MyExceptionHandler {ResponseBodyExceptionHandler(Exception.class)public MapString, Object handleException(Exception e) {MapString, Object map new HashMap(2);map.put(code, 100011);map.put(msg, e.getMessage());return map;}
} 由上面我们已经知道数据的来源是调用DefaultErrorAttributes的getErrorAttributes方法得到的而这个DefaultErrorAttributes是在ErrorMvcAutoConfiguration配置类中注册的并且注册之前会检查容器中是否已经拥有 BeanConditionalOnMissingBean(value {ErrorAttributes.class},search SearchStrategy.CURRENT)public DefaultErrorAttributes errorAttributes() {return new DefaultErrorAttributes(this.serverProperties.getError().isIncludeException());}
所以我们可以只要实现ErrorAttributes接口或者继承DefaultErrorAttrites类然后注册到容器中就行了
ControllerAdvice
public class MyExceptionHandler {ExceptionHandler(Exception.class)public String handleException(Exception e, HttpServletRequest request) {MapString, Object map new HashMap(2);map.put(name, hello);map.put(password, 123456);//设置状态码request.setAttribute(javax.servlet.error.status_code, 500);//把数据放到request域中request.setAttribute(ext, map);return forward:/error;}
}
Configuration
public class MyMvcConfig implements WebMvcConfigurer {Beanpublic DefaultErrorAttributes errorAttributes() {return new MyErrorAttributes();}class MyErrorAttributes extends DefaultErrorAttributes {Overridepublic MapString, Object getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {//调用父类的方法获取默认的数据MapString, Object map new HashMap(super.getErrorAttributes(webRequest, includeStackTrace));//从request域从获取到自定义数据MapString, Object ext (MapString, Object) webRequest.getAttribute(ext, RequestAttributes.SCOPE_REQUEST);map.putAll(ext);return map;}}......