• springboot异常处理方式


    一、异常处理思路

      异常捕获的是unchecked型异常,因为checked异常在代码中年已经处理过,当然是在使用try-catch处理。这里首先使用ExceptionHandler捕获全局异常,这样如果是程序中有运行时异常就可以被随时捕获到,并将必要信息返回给调用者。对于使用try-catch捕获的异常,先创建自定义的运行时异常类,然后手动抛出。另外,在service使用unchecked异常可以触发事务回滚。

    二、try-catch手动抛出异常代码演示

    spingboot全局异常创建:

    package com.dbzx.exception;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    
    import com.dbzx.common.ResultModel;
    
    
    /**
     * 拦截异常后返回json信息,如果需要返回html页面,需要通过ModelAndView返回
     * @author
     *
     */
    @RestControllerAdvice
    public class JsonResultExceptionHandler {
    
        @ExceptionHandler(value = Exception.class)
        public ResultModel defaultErrorHandler(HttpServletRequest req, 
                Exception e) throws Exception {
    
            e.printStackTrace();
            return ResultModel.errorException("异常信息:"+e.getMessage());
        }
    }

    自定义异常类:

    package com.dbzx.exception;
    
    public class CustomUncheckException extends RuntimeException{
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        public CustomUncheckException() {
            super();
        }
        
        public CustomUncheckException(String msg) {
            super(msg);
        }
        
        public CustomUncheckException(String msg,Throwable cause) {
            super(msg,cause);
        }
        
    }

    调用代码:

    package com.dbzx.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.dbzx.common.ResultModel;
    import com.dbzx.exception.CustomUncheckException;
    import com.dbzx.service.UserService;
    
    @RestController
    @RequestMapping("dbzx")
    public class HelloController {
      
        @Autowired
        UserService userService;
        
        @RequestMapping("/hello")
        public ResultModel hello() {
    
            try {
                int i = 1 / 0;
            } catch (Exception e) {
                throw new CustomUncheckException(e.getMessage());
            }
            return ResultModel.ok("hello");
        }
    }

    调用结果:

    {
      "status": 555,
      "msg": "异常信息:/ by zero",
      "data": null
    }
    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    flask的过滤器
    flask的for、if语法
    flask模版语法
    flask response跳转页面
    flask 简单注册页面
    Egress 网关 TLS 连接 发起的过程 (SDS)
    Egress Gateway
    Egress TLS Origination
    Istio ServiceEntry 访问外部服务
    font awesome icon
  • 原文地址:https://www.cnblogs.com/whalesea/p/11384397.html
Copyright © 2020-2023  润新知