千家信息网

SpringMVC@ControllerAdvice的使用场景

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"SpringMVC@ControllerAdvice的使用场景",在日常操作中,相信很多人在SpringMVC@ControllerAdvice的使用场景问题上存在疑惑,小编查阅了各
千家信息网最后更新 2025年11月08日SpringMVC@ControllerAdvice的使用场景

这篇文章主要介绍"SpringMVC@ControllerAdvice的使用场景",在日常操作中,相信很多人在SpringMVC@ControllerAdvice的使用场景问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"SpringMVC@ControllerAdvice的使用场景"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

@ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:

全局异常处理 全局数据绑定 全局数据预处理

灵活使用这三个功能,可以帮助我们简化很多工作,需要注意的是,这是 SpringMVC 提供的功能,在 Spring Boot 中可以直接使用,下面分别来看。

全局异常处理

使用 @ControllerAdvice 实现全局异常处理,只需要定义类,添加该注解即可定义方式如下:

@ControllerAdvicepublic class MyGlobalExceptionHandler { @ExceptionHandler(Exception.class) public ModelAndView customException(Exception e) { ModelAndView mv = new ModelAndView(); mv.addObject("message", e.getMessage()); mv.setViewName("myerror"); return mv; }}

在该类中,可以定义多个方法,不同的方法处理不同的异常,例如专门处理空指针的方法、专门处理数组越界的方法…,也可以直接向上面代码一样,在一个方法中处理所有的异常信息。

@ExceptionHandler 注解用来指明异常的处理类型,即如果这里指定为 NullpointerException,则数组越界异常就不会进到这个方法中来。

全局数据绑定

全局数据绑定功能可以用来做一些初始化的数据操作,我们可以将一些公共的数据定义在添加了 @ControllerAdvice 注解的类中,这样,在每一个 Controller 的接口中,就都能够访问导致这些数据。

使用步骤,首先定义全局数据,如下:

@ControllerAdvicepublic class MyGlobalExceptionHandler { @ModelAttribute(name = "md") public Map mydata() { HashMap map = new HashMap<>(); map.put("age", 99); map.put("gender", "男"); return map; }}

使用 @ModelAttribute 注解标记该方法的返回数据是一个全局数据,默认情况下,这个全局数据的 key 就是返回的变量名,value 就是方法返回值,当然开发者可以通过 @ModelAttribute 注解的 name 属性去重新指定 key。

定义完成后,在任何一个Controller 的接口中,都可以获取到这里定义的数据:

@RestControllerpublic class HelloController { @GetMapping("/hello") public String hello(Model model) { Map map = model.asMap(); System.out.println(map); int i = 1 / 0; return "hello controller advice"; }}

全局数据预处理

考虑我有两个实体类,Book 和 Author,分别定义如下:

public class Book { private String name; private Long price; //getter/setter}public class Author { private String name; private Integer age; //getter/setter}

此时,如果我定义一个数据添加接口,如下:

@PostMapping("/book")public void addBook(Book book, Author author) { System.out.println(book); System.out.println(author);}

这个时候,添加操作就会有问题,因为两个实体类都有一个 name 属性,从前端传递时 ,无法区分。此时,通过 @ControllerAdvice 的全局数据预处理可以解决这个问题

解决步骤如下:

1.给接口中的变量取别名

@PostMapping("/book")public void addBook(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author) { System.out.println(book); System.out.println(author);}

2.进行请求数据预处理

在 @ControllerAdvice 标记的类中添加如下代码:

@InitBinder("b")public void b(WebDataBinder binder) { binder.setFieldDefaultPrefix("b.");}@InitBinder("a")public void a(WebDataBinder binder) { binder.setFieldDefaultPrefix("a.");}

@InitBinder("b") 注解表示该方法用来处理和Book和相关的参数,在方法中,给参数添加一个 b 前缀,即请求参数要有b前缀.

3.发送请求

请求发送时,通过给不同对象的参数添加不同的前缀,可以实现参数的区分.

到此,关于"SpringMVC@ControllerAdvice的使用场景"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 全局 方法 处理 注解 参数 场景 不同 功能 接口 学习 预处理 前缀 这是 问题 帮助 三个 两个 代码 变量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库执行命令错误 动车组网络技术的发展与展望 数据库中属性的值域 北京米仓财行互联网科技 成都软件开发技术学习网站 上海精英网络技术开发口碑推荐 云服务器开浏览器 国家网络安全宣传周指导思想 软件开发科技公司展台设计 梦幻手游服务器等级65级囤什么 最安全的邮件服务器 血液透析运行数据库总结分析 学完编程如何做软件开发 监控服务器哪家好又便宜 服务器存储设备有哪些作用 青海hp服务器维修维保 完整软件开发项目管理制度 舟山嵌入式软件开发工具 四川大学网络安全研究生招生 淄博三校软件开发有限公司 手机通过代理服务器上网安全不 服务器p6 未转变者服务器当面刷新物品 警察来公司说网络安全 ncre三级网络技术真题 政务网络技术 科技和工业互联网 明日之后手游服务器大全 轻量应用服务器2核2g 安全的联想ibm服务器
0