zoukankan      html  css  js  c++  java
  • SpringBoot的错误处理机制

    一、springboot错误的默认处理机制

    默认效果:

    1)、浏览器,返回一个默认的错误页面

    180226173408

    2)、如果是其他客户端,默认响应一个json数据

    180226173527

    二、如何定制错误响应

    1、如何定制错误的页面;

    1)、有模板引擎的情况下;error/状态码; 【将错误页面命名为 错误状态码.html 放在模板引擎文件夹里面的 error文件夹下】,发生此状态码的错误就会来到对应的页面;

    我们可以使用4xx和5xx作为错误页面的文件名来匹配这种类型的所有错误,精确优先(优先寻找精确的状态码.html);

    页面能获取的信息;

    timestamp:时间戳

    status:状态码

    error:错误提示

    exception:异常对象

    message:异常消息

    errors:JSR303数据校验的错误都在这里

    2)、没有模板引擎(模板引擎找不到这个错误页面),静态资源文件夹下找;

    3)、以上都没有错误页面,就是默认来到SpringBoot默认的错误提示页面;

    clipboard

    clipboard

    2、如何定制错误的json数据

    1)、自定义异常处理&返回定制json数据;

    @ControllerAdvice
    public class MyExceptionHandler {
    
        //浏览器和客户端返回的都是json
        @ResponseBody
        @ExceptionHandler(UserNotExistException.class)
        public Map<String,Object> handleException(Exception e){
            Map<String,Object> map = new HashMap<>();
            map.put("code", "user.notexists");
            map.put("message",e.getMessage());
            return map;
        }
    }

    2)、转发到/error进行自适应响应效果处理

    @ControllerAdvice
    public class MyExceptionHandler {
    
        @ExceptionHandler(UserNotExistException.class)
        public String handleException(HttpServletRequest request,Exception e){
            Map<String,Object> map = new HashMap<>();
            //传入我们自己的错误状态码
            request.setAttribute("javax.servlet.error.status_code", 400);
            map.put("code", "user.notexists");
            map.put("message",e.getMessage());
            request.setAttribute("etx", map);
            return "forword:/error";
        }
    }

    3)、将我们的定制数据携带出去(携带到页面,或者响应的json字符串)

    出现错误以后,会来到/error请求,会被BasicErrorController处理,响应出去可以获取的数据是由getErrorAttributes得到的(是AbstractErrorController(ErrorController)规定的方法);

    1、完全来编写一个ErrorController的实现类【或者是编写AbstractErrorController的子类】,放在容器中;

    2、页面上能用的数据,或者是json返回能用的数据都是通过errorAttributes.getErrorAttributes得到;

    容器中DefaultErrorAttributes.getErrorAttributes();默认进行数据处理的;

    自定义ErrorAttributes

    //给容器中加入我们自己定义的ErrorAttributes
    @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("personal", "houchen");
            Map<String,Object> etx = (Map<String,Object>)webRequest.getAttribute("etx", 0);
            errorAttributes.put("etx", etx);
            return errorAttributes;
        }
    }

    clipboard

  • 相关阅读:
    如何:为 Silverlight 客户端生成双工服务
    Microsoft Sync Framework 2.1 软件开发包 (SDK)
    Windows 下的安装phpMoAdmin
    asp.net安全检测工具 Padding Oracle 检测
    HTTP Basic Authentication for RESTFul Service
    Windows系统性能分析
    Windows Server AppFabric Management Pack for Operations Manager 2007
    Mongo Database 性能优化
    服务器未能识别 HTTP 标头 SOAPAction 的值
    TCP WAIT状态及其对繁忙的服务器的影响
  • 原文地址:https://www.cnblogs.com/houchen/p/13605226.html
Copyright © 2011-2022 走看看