定義一個全局處理類,以及出現異常處理的方法
/**
* 全局異常處理,針對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";
}
}