zoukankan      html  css  js  c++  java
  • SpringBoot全局异常处理方式

    每个项目全局异常处理非常重要, 今天在处理项目架构的时候添加了一个全局异常处理。

    大概三种异常情况:

    一:在进入Controller之前,譬如请求一个不存在的地址,404错误。 
    二:在执行@RequestMapping时,进入逻辑处理阶段前。譬如传的参数类型错误。 
    三:以上都正常时,在controller里执行逻辑代码时出的异常。譬如NullPointerException。 

    @RestController
    public class FinalExceptionHandler implements ErrorController {
        @Override
        public String getErrorPath() {
            return "/error";
        }
    
        @RequestMapping(value = "/error")
        public Object error(HttpServletResponse resp, HttpServletRequest req) {
            // 错误处理逻辑
            return "其他异常";
        }
    }
    

    二、三

    import static org.springframework.http.HttpStatus.NOT_EXTENDED;
    
    /**
     * Created by mazhq on 2018/7/10
     * 全局异常处理
     */
    @ControllerAdvice
    public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
    
        private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    
        /**
         * 在controller里面内容执行之前,校验一些参数不匹配啊,Get post方法不对啊之类的
         */
        @Override
        protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) {
            System.out.println("错误");
            return new ResponseEntity<Object>(BaseCode.retCode(ResultCode.parmFarmat).toString(), NOT_EXTENDED);
        }
    
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public String jsonHandler(HttpServletRequest request, Exception e) {
            logger.error("请求路径:"+request.getRequestURL().toString()+"; 发生错误!");
            log(e, request);
            return BaseCode.retCode(ResultCode.failure).toString();
        }
    
        private void log(Exception ex, HttpServletRequest request) {
            logger.error("************************异常开始*******************************");
    
            logger.error("异常信息:", ex);
            logger.error("请求地址:" + request.getRequestURL());
            Enumeration enumeration = request.getParameterNames();
            logger.error("请求参数");
            while (enumeration.hasMoreElements()) {
                String name = enumeration.nextElement().toString();
                logger.error(name + "---" + request.getParameter(name));
            }
    
            StackTraceElement[] error = ex.getStackTrace();
            for (StackTraceElement stackTraceElement : error) {
                logger.error(stackTraceElement.toString());
            }
            logger.error("************************异常结束*******************************");
        }
    }
    

      

    这两个方法基本可以解决未处理异常问题,在其中可以添加自己的业务逻辑,自由发挥。

  • 相关阅读:
    ASP.NET-FineUI开发实践-9(四)
    ASP.NET-FineUI开发实践-9(三)
    ASP.NET-FineUI开发实践-9(二)
    ASP.NET-FineUI开发实践-9
    ASP.NET-FineUI开发实践-8(二)
    ASP.NET-FineUI开发实践-8
    ASP.NET-FineUI开发实践-7
    ASP.NET-FineUI开发实践-6(三)
    ASP.NET-FineUI开发实践-6(二)
    ASP.NET-FineUI开发实践-6
  • 原文地址:https://www.cnblogs.com/owenma/p/9289607.html
Copyright © 2011-2022 走看看