@ControllerAdvice全局异常处理不起作用原因及解决办法
这段时间使用springboot搭建基础框架,作为springboot新手,各种问题都有。
当把前端框架搭建进来时,针对所有controller层的请求,所发生的异常,需要有一个统一的异常处理,然后返回错误页面。其中方法很多,可以使用拦截器,或者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;
/**
* 异常统一处理
* @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,当controller层的某个action抛出异常后,GlobalExceptionHandler就能捕获到,把异常交给handle方法处理,该方法用
@ExceptionHandler注解,这是ControllerAdvice配套的注解,如有不明白之处,可以看看官方文档。
完成后,在controller的某个方法,故意抛出一个RuntimeException,如int a = 1 / 0; 但是不管怎么调试,始终没有进入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"},结果果然进入handle了。
总结:@ControllerAdvice注解的类,需要让spring扫描到。
---------------------
作者:壮士断臂
来源:CSDN
原文:https://blog.csdn.net/u011442760/article/details/73522098
@ControllerAdvice全局异常处理不起作用原因及解决办法的更多相关文章
- SpringBoot 内部方法调用,事务不起作用的原因及解决办法
在做业务开发时,遇到了一个事务不起作用的问题.大概流程是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚.查阅资料后,问题得到解决,记录下来分享给大家. 场景 我在这里模拟一个场景 ...
- Jrebel不生效的原因和解决办法
一.问题原因和解决办法 我这里用的是idea,装了jrebel.之前用的好好的. 后边新建了一个project,不知道为啥,感觉总是不生效,虽然显示class reload了,但感觉还是没起作用. 后 ...
- jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法
jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法 在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...
- 各种编码问题产生原因以及解决办法---------响应编码,请求编码,URL编码
响应编码 产生原因以及解决办法: 示例: package cn.yzu; import java.io.IOException; import javax.servlet.ServletExcept ...
- .Net内存泄露原因及解决办法
.Net内存泄露原因及解决办法 1. 什么是.Net内存泄露 (1).NET 应用程序中的内存 您大概已经知道,.NET 应用程序中要使用多种类型的内存,包括:堆栈.非托管堆和托管堆.这里我们需 ...
- Oracle死锁产生的原因和解决办法
如果有两个会话,每个会话都持有另一个会话想要的资源,此时就会发生死锁.用下面实验来说明死锁的产生原因和解决办法.SESSION1:SQL> create table t2 as select * ...
- HttpClient的CircularRedirectException异常原因及解决办法
HttpClient的CircularRedirectException异常原因及解决办法 这两天在使用我自己爬虫抓取网页的时候总是出现 org.apache.http.client.ClientPr ...
- php_curl.dll libssh2.dll 始终无法加载的原因 及解决办法
在StackOverflow得到最终原因及解决办法 http://stackoverflow.com/questions/16424117/php-unable-to-load-php-curl-dl ...
- mysql保存中文乱码的原因和解决办法
当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法这样一篇能解决问题的文章是多么激动人心. 也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类 ...
随机推荐
- Netty 框架学习 —— EventLoop 和线程模型
EventLoop 接口 Netty 是基于 Java NIO 的,因此 Channel 也有其生命周期,处理一个连接在其生命周期内发生的事件是所有网络框架的基本功能.通常来说,我们使用一个线程来处理 ...
- 【linux】驱动-13-阻塞与非阻塞
目录 前言 13. 阻塞与非阻塞 13.1 阻塞与非阻塞 13.2 休眠与唤醒 13.2.1 内核休眠函数 13.2.2 内核唤醒函数 13.3 等待队列(阻塞) 13.3.1 定义等待队列头部 13 ...
- STM32学习笔记-NVIC中断知识点
STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...
- ORA-01157:cannot identify/lock data file 6 - see DBWR trace file ORA-01110:data file 6:'/u01/app/oracle/oradata/PRDO2/sysaux02.dbf'
- 判断Linux 系统负荷是否过载
1.如果你的电脑很慢,可以查看下它的工作量是否太大. 在Linux系统中,我们一般使用uptime,或者w 或者top命令 如下:在操作系统中输入 :uptime 08:55:44 up 23 day ...
- js笔记21
1.解决函数内的this指向 (1)可以在函数外提前声明变量 _this/=this (2)通过apply和call来修改函数内的this指向 二者的区别: 二者的用法不一样,就是参数形式不一样 ...
- 『无为则无心』Python序列 — 20、Python元组的介绍与使用
目录 1.元组的应用场景 2.定义元组 3.元组的常见操作 @1.按下标查找数据 @2.index()方法 @3.count()方法 @4.len()方法 4.元祖中的列表元素 5.扩展:序列封包和序 ...
- layui 修改表格边框颜色
/*设置不可编辑时字体颜色*/ .layui-disabled, .layui-disabled:hover { color: #101010 !important; background-color ...
- git分支案例
- HTTP:HTTP请求头和响应头详解
HTTP请求报文 HTTP 请求报文由3部分组成(请求行+请求头+请求体) HTTP请求报文分析 1. 是请求方法,GET和POST是最常见的HTTP方法,初次以外还包括 DELETE.HEAD.O ...