之前,我们介绍过@ModelAttribute@ExceptionHandler,前者可以往请求的Model里加数据,后者可以接受请求处理方法抛出的异常。但是他们放在控制器(Controller)里的时候,作用范围是有限的,只管当前控制器里的方法。如果你有几百个控制器,在每个控制器里都加上类似的代码,不免有点冗余和费劲儿。Spring框架提供了@ControllerAdvice注解,帮助你将其应用到所有的控制器上。

Controller Advice字面上意思是“控制器通知”,Advice除了“劝告”、“意见”之外,还有“通知”的意思。你可以将@ModelAttribute@ExceptionHandler标记的方法提取出来,放到一个类里,并将加上@ControllerAdvice,这样,所有的控制器都可以用了:

因为@ControllerAdvice被元注解@Component标记,所以它也是可以被组件扫描扫到并放入Spring容器的。

如果你只想对一部分控制器添加通知,比如某个包下的控制器,可以这样写:

如果你不想把包名写死,不如把包里的某个类传进去,这样包名重构了也不怕:

如果你只想对某几个控制器添加通知,可以这样写:

挺简单的是不是?

通知里的@ModelAttribute方法会先于控制器里执行。通知里的@ExceptionHandler方法优先级会低于控制器里的。仔细想想就能明白,局部的要优先于全局的。

控制器通知还有一个兄弟,@RestControllerAdvice,如果用了它,错误处理方法的返回值不会表示用的哪个视图,而是会作为HTTP body处理,即相当于错误处理方法加了@ResponseBody注解。

原文链接:fookwood.com/spring-boot…

转载于:https://juejin.im/post/5d2076085188250fcf17bf6d

Spring Boot教程(11) – 理解注解@ControllerAdvice相关推荐

  1. Spring Boot教程(一)注解配置与EhCache使用

    2019独角兽企业重金招聘Python工程师标准>>> 快速入门 首先,下载样例工程chapter3-2-2.本例通过spring-data-jpa实现了对User用户表的一些操作, ...

  2. Spring Boot教程(十六):Spring Boot集成shiro

    Apache Shiro™是一个功能强大且易于使用的Java安全框架,可执行身份验证,授权,加密和会话管理.借助Shiro易于理解的API,您可以快速轻松地保护任何应用程序 - 从最小的移动应用程序到 ...

  3. Spring Boot 实战 —— MyBatis(注解版)使用方法

    原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...

  4. 超详细的Spring Boot教程,搞定面试官!

    前言 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...

  5. Spring Boot教程(二十):Spring Boot使用String Task定时任务

    一.JAVA常见的几种定时任务比较 Timer:jdk自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让程序按照某一个频度执行, ...

  6. 准备写个Spring Boot教程

    最近我打算写一系列Spring Boot教程,用来讲解Spring Boot基础知识和一些常见的应用场景.你可能会问,现在讲这个话题的东西这么多,写出来的意义是啥,别人会看么.我的觉得吧,一条街上很多 ...

  7. Spring Boot 教程(三): Spring Boot 整合Mybatis

    教程简介 本项目内容为Spring Boot教程样例.目的是通过学习本系列教程,读者可以从0到1掌握spring boot的知识,并且可以运用到项目中.如您觉得该项目对您有用,欢迎点击收藏和点赞按钮, ...

  8. Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理

    Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理 参考文章: (1)Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理 ( ...

  9. Spring Boot教程

    Spring Boot教程 欢迎使用Spring Boot教程.Spring Boot是Pivotal Team(The Spring Team)的一个全新项目.它是在现有Spring Framewo ...

最新文章

  1. access导出MySQL表格_如何将Access数据库里的表内容导出到Excel
  2. Angular应用中配置全局路径映射
  3. R语言distMeeus函数计算大圆距离实战(Great Circle Distance)
  4. Gevent简明教程
  5. Unity 2018.3.1 SyncVar没有同步服务器变量
  6. Abp vNext 切换MySql数据库
  7. Sublime Text 设置在标签页中打开文件
  8. 【Word 】隐藏功能生成特殊线
  9. 冷启动阶段的多规则策略如何筛选?
  10. C#将数据库图片显示在pictureBox
  11. 例14:计算某日是该年的第几天
  12. Bluetooth L2CAP介绍
  13. 社群经济:如何利用社群做营销?
  14. FORM开发实现动态LOV
  15. 数据可视化常用LED字体
  16. java运行vbs_如何在Java中执行VBS脚本?
  17. 【持续更新】MARL 算法汇总
  18. 第八章 DirectX 3D模型加载和骨骼动画(上)
  19. 炒币的诱惑、安稳的生活
  20. 什么是命名路由?命名路由,命名路由意义

热门文章

  1. 【J2EE设计模式】模型-视图-控制器模式(MVC模式)
  2. python 等待其他线程执行完_面试官:如何让线程顺序执行,join,还有其他办法吗?...
  3. kafka数据 落盘_Kafka数据可靠性保证三板斧-ACK/ISR/HW
  4. apriori算法c++_关联分析——基于Apriori算法实现
  5. c语言 链表_C语言编程第22讲——单向有序链表的C语言实现
  6. 操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)
  7. css链接样式_CSS中的样式链接
  8. stringwriter_Java StringWriter toString()方法与示例
  9. Python | 使用matplotlib.pyplot创建条形图
  10. Java——异常(try...catch...finally)