Spring3.2新注解@ControllerAdvice
@ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。
注解@ControllerAdvice的代码:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME) //规定注解时长
@Documented
@Component
public @interface ControllerAdvice { }
该注解使用了@Component注解,这样的话当我们使用<context:component-scan>
扫描时也能扫描到。
其javadoc定义:
/**
* Indicates the annotated class assists a "Controller".
*
* <p>Serves as a specialization of {@link Component @Component}, allowing for
* implementation classes to be autodetected through classpath scanning.
*
* <p>It is typically used to define {@link ExceptionHandler @ExceptionHandler},
* {@link InitBinder @InitBinder}, and {@link ModelAttribute @ModelAttribute}
* methods that apply to all {@link RequestMapping @RequestMapping} methods.
*
* @author Rossen Stoyanchev
* @since 3.2
*/
即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。
如下面代码中的processUnauthenticatedException方法就会应用到有@RequestMapping注解的方法。
代码:
@ControllerAdvice
public class ControllerAdviceTest { @ModelAttribute public User newUser() { System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前把返回值放入Model"); return new User(); } @InitBinder public void initBinder(WebDataBinder binder) { System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器"); } @ExceptionHandler(UnauthenticatedException.class) @ResponseStatus(HttpStatus.UNAUTHORIZED) public String processUnauthenticatedException(NativeWebRequest request, UnauthenticatedException e) { System.out.println("===========应用到所有@RequestMapping注解的方法,在其抛出UnauthenticatedException异常时执行"); return "viewName"; //返回一个逻辑视图名 }
}
如果你的spring-mvc配置文件使用如下方式扫描bean
Java代码 收藏代码
<context:component-scan base-package="com.sishuok.es" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
需要把@ControllerAdvice包含进来,否则不起作用:
Java代码 收藏代码
<context:component-scan base-package="com.sishuok.es" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
1、@ModelAttribute注解的方法作用跟springMVC中的作用是一样的,只不过此处是对所有的@RequestMapping注解的方法都起作用。当需要设置全局数据时比较有用。
2、@InitBinder注解的方法作用同1类似。当需要全局注册时比较有用。
3、@ExceptionHandler,异常处理器,此注解的作用是当出现其定义的异常时进行处理的方法,其可以使用springmvc提供的数据绑定,比如注入HttpServletRequest等,还可以接受一个当前抛出的Throwable对象。
该注解非常简单,大多数时候其实只@ExceptionHandler比较有用,其他两个用到的场景非常少,这样可以把异常处理器应用到所有控制器,而不是@Controller注解的单个控制器。
来源:http://jinnianshilongnian.iteye.com/blog/1866350
我在实际项目中遇到的:
@ControllerAdvice //增强注解
@ResponseBody
public class ExceptionAdvice {/** * 400 - Bad Request */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(HttpMessageNotReadableException.class) public BaseResult handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
// logger.error("参数解析失败", e); return new BaseResult().failure("could_not_read_json"); } /** * 405 - Method Not Allowed */ @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) @ExceptionHandler(HttpRequestMethodNotSupportedException.class) public BaseResult handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
// logger.error("不支持当前请求方法", e); return new BaseResult().failure("request_method_not_supported"); } /** * 415 - Unsupported Media Type */ @ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE) @ExceptionHandler(HttpMediaTypeNotSupportedException.class) public BaseResult handleHttpMediaTypeNotSupportedException(Exception e) {
// logger.error("不支持当前媒体类型", e); return new BaseResult().failure("content_type_not_supported"); } /** * 500 - Internal Server Error */ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(Exception.class) public BaseResult handleException(Exception e) {
// logger.error("服务运行异常", e); return new BaseResult().failure(e.getLocalizedMessage()); }
}
上面使用了@ControllerAdvice注解的类里的方法,会在控制器代码里出现相应错误时调用,然后返回一个结果到前端。
Spring3.2新注解@ControllerAdvice相关推荐
- 【Spring】新注解
新注解 注解 释意 @Configuration 作用:指定当前类是一个配置类 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写 ...
- SpringMVC:注解@ControllerAdvice的工作原理
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/andy_zhang200 ...
- Spring的新注解——Configuration、ComponentScan、Bean、Import、PropertySource || spring整合Junit分析
spring中的新注解 spring整合Junit分析 1.应用程序的入口 main方法 2.junit单元测试中,没有main方法也能执行 junit集成了一个main方法 ...
- Spring-学习笔记06【Spring的新注解】
Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...
- JAVAEE框架之Spring新注解
五.Spring5 新注解 新的注解有用,为后面的SpringBoot可以打一个基础,因为到SpringBoot的课程, 多了很多注解.这时候,先了解一部分. 5.1 @Configuration ...
- Spring原始注解和新注解(使用注解代替xml配置文件)
Spring原始注解 spring的原始注解主要是为了替代xml文件中配置的 < bean > @Component:使用在类上用于实例化Bean @Controller:使用在web层类 ...
- Struts2.3.5+Hibernate3+Spring3.1基于注解实现的多文件上传,下载
Struts2.3.5+Hibernate3+Spring3.1基于注解实现的的多文件上传,下载,这里是上传文件到数据库中,上传控件可以增加和删除,有需要的朋友可以看看. 以下是源码下载地址:http ...
- @select注解_SSM框架(十三):Spring框架中的IoC(3)新注解,完全摆脱xml文件
spring中的新注解 1.Configuration 作用:指定当前类是一个配置类 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以 ...
- Spring3.1新属性管理API:PropertySource、Environment、Profile
2019独角兽企业重金招聘Python工程师标准>>> Spring3.1提供了新的属性管理API,而且功能非常强大且很完善,对于一些属性配置信息都应该使用新的API来管理.虽然现在 ...
最新文章
- oracle本身的常用数据字典表
- 将matlab的.m文件打包为独立可执行程序.exe —— 基于Matlab R2015b
- 自己发现的数学规律一
- android 系统状态栏的隐藏和显示
- apkTool反编译apk碰到的问题
- 【CSS基础】实现 div 里的内容垂直水平居中
- php中简单ubb案例,php Ubb代码编辑器函数代码
- 配置内网windows域教程,模拟公司内网架构
- mysqld: [ERROR] Found option without preceding group in config file my.ini at line 1
- 计算机xp怎样连接internet,XP系统电脑怎么连接无线WIFI网络,涨知识了
- WSL1安装rust报错thread ‘main‘ panicked的解决方法
- Python 实现生命游戏
- 全球重力异常值和磁场异常值提取
- 西安公交车路线汇总(1)
- 文本数据的词云可视化
- 电脑无线如何启用dhcp服务器,win7系统使用无线连接遇到DHCP未启用报错如何解决...
- 分布式专题(一)什么是分布式
- 量子力学奇妙之旅-从相对论下薛定谔方程到量子场论
- 当世事再没完美可远在岁月如歌中找你
- 模糊控制——隶属函数
热门文章
- optee3.14.0 qemu_v8的环境搭建篇
- android指纹fingerprint学习总结
- 《格理论与密码学》笔记一
- CreateThread和CreateRemoteThread
- 解决System.Web.Script.Serialization导入失败
- 1.6 @FunctionalInterface注解
- Codeforces Beta Round #6 (Div. 2)【未完结】
- 4.2.1 磁盘的结构
- 项目: 用Easyx绘制围棋和象棋的棋盘
- ActiveMQ目录结构