@controlleradvice注解不起作用

這段時間使用springboot搭建基礎(chǔ)框架,作為springboot新手,各種問題都有。

當(dāng)把前端框架搭建進來時,針對所有controller層的請求,所發(fā)生的異常,需要有一個統(tǒng)一的異常處理,然后返回錯誤頁面。其中方法很多,可以使用攔截器,或者filter,我是使用controlleradvice注解。

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;

/**

* 異常統(tǒng)一處理

* @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;

}

}

定義了全局異常處理類GlobalExceptionHandler,當(dāng)controller層的某個action拋出異常后,GlobalExceptionHandler就能捕獲到,把異常交給handle方法處理,該方法用

@ExceptionHandler注解,這是ControllerAdvice配套的注解,如有不明白之處,可以看看官方文檔。

完成后,在controller的某個方法,故意拋出一個RuntimeException,如int a = 1 / 0; 但是不管怎么調(diào)試,始終沒有進入handle放開,找了很多資料和官方文檔,跟此

處使用的是一樣,一開始以為是配置問題,但是項目是使用springboot的,并不需要什么配置。后來不知道在哪個博客看到,定義了之后,要讓spring掃描到。于是我就開始

檢查springboot入口的main方法

@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"},結(jié)果果然進入handle了。

總結(jié):@ControllerAdvice注解的類,需要讓spring掃描到。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容