springboot全局異常與try..catch的區別


定義一個全局處理類,以及出現異常處理的方法

/**
 * 全局異常處理,針對Controller層 ,service出現異常也能捕獲
 * ajax請求,返回json數據;
 * @Author: lazy
 * @Date: 2019/8/6 16:09
 * @Version 1.0.0
 * @Description
 */
@ControllerAdvice
public class AppControllerAdvice {

    private static Logger logger = LoggerFactory.getLogger(AppControllerAdvice.class);

    /**
     * @ResponseBody 針對返回json數據類型,若返回視圖,無需@ResponseBody
     * @param ex
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Map<String,Object> exceptionHandler(Exception ex){
        Map<String,Object> map = new HashMap<>();
        //控制台打印異常
        ex.printStackTrace();
        logger.error("異常信息:"+ex.getMessage());
        map.put("status",500 );
        map.put("message","服務異常" );
        return map;
    }
}

  演示異常處理的控制類

/**
 * springboot使用全局異常,會捕獲到異常,但不會執行異常后面的語句,也就是說
 * 發生異常后,直接跳轉到異常處理類中的處理方法中,執行完后,將結果返回;
 * 若使用try...catch..語句塊,可以捕獲異常,且可以正常執行catch后面的語句;
 * 也就是說,這里會跳轉到index.html頁面上;
 * @Author: lazy
 * @Date: 2019/11/27 9:23
 * @Version 1.0.0
 * @Description
 */
@Controller
public class IndexAction {

    @RequestMapping("/index")
    public String index(){
        String str = null;
        str.replaceAll(",","" );
        /*try{
            String str = null;
            str.replaceAll(",","" );
        }catch (Exception e){
            e.printStackTrace();
        }*/
        //使用全局異常處理,若上面發生異常,不會執行,使用try..catch則可執行
        System.out.println("發生異常后");
        
        return "index";
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM