這段時間使用springboot搭建基礎框架,做爲springboot新手,各類問題都有。前端
當把前端框架搭建進來時,針對全部controller層的請求,所發生的異常,須要有一個統一的異常處理,而後返回錯誤頁面。其中方法不少,可使用攔截器,或者filter,我是使用controlleradvice註解。web
package org.lhzhian.base.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
/**
* 異常統一處理
* @author lhzhian
* @date 2016年4月28日
*/
@ControllerAdvice
public class GlobalExceptionHandler {
private final static String ERROR_PAGE = "error";
@ExceptionHandler(Exception.class)
public ModelAndView handle(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("message", e.getMessage());
mv.setViewName(ERROR_PAGE);
return mv;
}
} spring
定義了全局異常處理類GlobalExceptionHandler,當controller層的某個action拋出異常後,GlobalExceptionHandler就能捕獲到,把異常交給handle方法處理,該方法用
@ExceptionHandler註解,這是ControllerAdvice配套的註解,若有不明白之處,能夠看看官方文檔。
完成後,在controller的某個方法,故意拋出一個RuntimeException,如int a = 1 / 0; 可是無論怎麼調試,始終沒有進入handle放開,找了不少資料和官方文檔,跟此
處使用的是同樣,一開始覺得是配置問題,可是項目是使用springboot的,並不須要什麼配置。後來不知道在哪一個博客看到,定義了以後,要讓spring掃描到。因而我就開始
檢查springboot入口的main方法springboot
@SpringBootApplication(scanBasePackages = "org.lhzhian")
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
前端框架
問題就在scanBasePackages = "org.lhzhian",這樣是,spring ioc是掃描不到@ControllerAdvice的,也就根本沒有這個bean,天然也不會進入handle方法,因此爲了讓
spring掃描到這個bean,我就試了下 scanBasePackages = {"org.lhzhian","org.lhzhian.base.exception"},結果果真進入handle了。
總結:@ControllerAdvice註解的類,須要讓spring掃描到。
---------------------
做者:壯士斷臂
來源:CSDN
原文:https://blog.csdn.net/u011442760/article/details/73522098 框架