Spring MVC中@ControllerAdvice注解实现全局异常拦截
在网上很多都把Advice翻译成增强器,其实从翻译工具上看到,这个单词翻译是忠告,通知的意思。
首先这个注解实在Spring Web包下,而Spring MVC离不开Spring Web的依赖,所以经常两个一起使用的。
题外:如果在asp.net webform下可以做这样的事情有两处地方,全部集成Base或者Globals去拦截,而在asp.net webmvc下提供了指定类进行注入,Globals同样也有,并且可以实现,但提倡这个,mvc已经有了新的类实现全局,以上是dotnet的等等。
@ControllerAdvice的做可以可以全局拦截指定的异常,并做想要的包装处理,比如跳转到别的页面,或者返回指定的数据格式等等。
下面是通过这个特定实现的简单拦截:
1、新建MyControllerAdvice类
package com.jsoft.springboottest.springboottest1.controller; import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.NativeWebRequest; import java.util.HashMap;
import java.util.Map; /**
* Controller增强器
*
* @author jim
* @date 2017/11/23
*/
@ControllerAdvice
public class MyControllerAdvice { @ModelAttribute
public void changeModel(Model model) {
System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前把返回值放入Model");
model.addAttribute("author", "Jim");
} @InitBinder
public void initBinder(WebDataBinder binder) {
System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器");
} /**
* 设置要捕获的异常,并作出处理
* 注意:这里可以返回试图,也可以放回JSON,这里就当做一个Controller使用
*
* @param request {@link NativeWebRequest}
* @param e {@link Exception}
* @return {@link Map}
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Map processUnauthenticatedException(NativeWebRequest request, Exception e) {
System.out.println("===========应用到所有@RequestMapping注解的方法,在其抛出Exception异常时执行");
Map map = new HashMap(5);
map.put("code", 404);
map.put("msg", e.getMessage());
return map;
}
}
2、测试异常,模拟抛出异常
@RequestMapping("/show")
public String show() throws Exception {
throw new Exception("测试异常");
}
测试效果:

测试工程:https://github.com/easonjim/5_java_example/tree/master/springboottest/springboottest9
参考:
http://jinnianshilongnian.iteye.com/blog/1866350
https://www.cnblogs.com/magicalSam/p/7198420.html
Spring MVC中@ControllerAdvice注解实现全局异常拦截的更多相关文章
- Spring MVC 中 @ModelAttribute 注解的妙用
Spring MVC 中 @ModelAttribute 注解的妙用 Spring MVC 提供的这种基于注释的编程模型,极大的简化了 web 应用的开发.其中 @Controller 和 @Rest ...
- Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法
Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx" ...
- spring 以及 spring mvc 中常用注解整理
spring 以及 spring mvc 中常用注解整理 @RequestMapping(映射路径) @Autowired(注入 bean 对象) 例如: @Autowired private Bas ...
- Spring MVC中基于注解的 Controller
终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响 ...
- 0001 - Spring MVC中的注解
1.概述 Spring MVC框架提供了功能强大的注解,大大简化了代码开发的同时也提升了程序的可扩展性 2.注解 2.1.@RequestMapping Spring MVC通过@RequestMap ...
- Spring MVC中@RequestMapping注解使用技巧(转)
@RequestMapping是Spring Web应用程序中最常被用到的注解之一.这个注解会将HTTP请求映射到MVC和REST控制器的处理方法上. 在这篇文章中,你将会看到@RequestMapp ...
- 在Spring MVC中使用注解的方式校验RequestParams
概述 Spring MVC支持Bean Validation,通过这个验证技术,可以通过注解方式,很方便的对输入参数进行验证,之前使用的校验方式,都是基于Bean对象的,但是在@RequestPa ...
- spring mvc中的注解说明
注解扫描 context:component-scan 包扫描 <context:component-scan base-package="org.bdp"> < ...
- Spring MVC 中的基于注解的 Controller【转】
原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...
随机推荐
- [转]Visual Studio调试之符号文件
http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio调试之断点进阶 ...
- Chromo开发常用插件和***工具
地址:https://www.google.com/chrome/webstore/ ***工具:链接:http://pan.baidu.com/s/1pLakW7T 密码:2gpw Axure RP ...
- Linux命令之必须掌握的十条命令
Linux现如今已经成为了软件行业最流行的操作系统,掌握Linux就成为了每一个开发者必备的专业技能. 为了方便大家学习,大学君在此为大家整理了在使用Linux时必须掌握的十条命令,希望大家能熟练掌握 ...
- Welcome-to-Swift-01基础部分
Swift 是 iOS 和 OS X 应用开发的一门新语言.然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的. Swift 的类型是在 C ...
- 正则表达式的\b与\B总结
\b 单词边界,是指单词与符号之间的边界,是一个位置,不是空格或字符.(这里单词可以是中文字符,英文字符,数字: 符号可以是中文符号,英文符号,空格,制表符,换行).不能与量词?+*{1}{2,5} ...
- 如何在github上寻找漏洞
https://github.com/search?p=2&q=eval%28%24_POST[&ref=searchresults&type=Code 1.$_GET s ...
- 【bzoj1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 SA+二分
Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个“模式”. John的牛奶按质 ...
- Unity 导出的android项目自动生成Private Libraries
如果Unity里面Plugins/Android 添加了 jar 文件,则导出Android 项目时会自动生成 Private Libraries. 而且里面的项还删不掉 然后在网上搜了一下,找到了原 ...
- tyvj 2020 rainbow 的信号
期望 被精度坑惨的我 注意:能开 long long 尽量开, 先除后乘, int 转 double 的时候 先转换在做运算 本题与位运算有关,位与位之间互不影响,所以我们可以分开考虑 #includ ...
- 洛谷 [P2480] 古代猪文
卢卡斯定理 注意特判底数和模数相等的情况 http://www.cnblogs.com/poorpool/p/8532809.html #include <iostream> #inclu ...