spring boot注解-@RestControllerAdvice @ExceptionHandler,@InitBinder @ModelAttribute⽅法
@RestControllerAdvice是什么
@RestControllerAdvice是⼀个组合注解,由@ControllerAdvice、@ResponseBody组成,⽽@ControllerAdvice继承了
@Component,因此@RestControllerAdvice本质上是个Component,⽤于定义@ExceptionHandler,@InitBinder和
@ModelAttribute⽅法,适⽤于所有使⽤@RequestMapping⽅法。
@RestControllerAdvice的特点:
1. 通过@ControllerAdvice注解可以将对于控制器的全局配置放在同⼀个位置。
2. 注解了@RestControllerAdvice的类的⽅法可以使⽤@ExceptionHandler、@InitBinder、@ModelAttribute注解到⽅法上。
3. @RestControllerAdvice注解将作⽤在所有注解了@RequestMapping的控制器的⽅法上。
4. @ExceptionHandler:⽤于指定异常处理⽅法。当与@RestControllerAdvice配合使⽤时,⽤于全局处理控制器⾥的异常。
5. @InitBinder:⽤来设置WebDataBinder,⽤于⾃动绑定前台请求参数到Model中。
6. @ModelAttribute:本来作⽤是绑定键值对到Model中,当与@ControllerAdvice配合使⽤时,可以让全局的@RequestMapping都
能获得在此处设置的键值对
@ControllerAdvice publicclass GlobalController{ ( )全局数据绑定 // 1 应⽤到所有 注解⽅法 // @RequestMapping 此处将键值对添加到全局,注解了 的⽅法都可以获得此键值对 // @RequestMapping @ModelAttribute publicvoidaddUser(Model model){ model.addAttribute("msg","此处将键值对添加到全局,注解了@RequestMapping的⽅法都可以获得此键值对"); } ( )全局数据预处理 // 2 应⽤到所有 注解⽅法,在其执⾏之前初始化数据绑定器 // @RequestMapping ⽤来设置 // WebDataBinder @InitBinder("user") publicvoidinitBinder(WebDataBinder binder){ } ( )全局异常处理 // 3 应⽤到所有 注解的⽅法,在其抛出 异常时执⾏ // @RequestMapping Exception 定义全局异常处理, 属性可以过滤拦截指定异常,此处拦截所有的 // value Exception @ExceptionHandler(Exception.class) public String handleException(Exception e){ return"erro
}
}
@ControllerAdvice可以指定 Controller 范围
basePackages: 指定⼀个或多个包,这些包及其⼦包下的所有 Controller 都被该 @ControllerAdvice 管理
@RestControllerAdvice(basePackages={"top.onething"}) @Slf4j publicclass ExceptionHandlerAdvice { @ExceptionHandler(Exception.class) public String handleException(Exception e){ return"error"; } }
basePackageClasses: 是 basePackages 的⼀种变形,指定⼀个或多个 Controller 类,这些类所属的包及其⼦包下的所有
Controller 都被该 @ControllerAdvice 管理
@RestControllerAdvice(basePackageClasses={TestController.class}) @Slf4j publicclass ExceptionHandlerAdvice { @ExceptionHandler(Exception.class) public String handleException(Exception e){ return"error"; } }
assignableTypes: 指定⼀个或多个 Controller 类,这些类被该 @ControllerAdvice 管理
@RestControllerAdvice(assignableTypes={TestController.class}) @Slf4j publicclass ExceptionHandlerAdvice { @ExceptionHandler(Exception.class) public String handleException(Exception e){ return"error"; } }
annotations: 指定⼀个或多个注解,被这些注解所标记的 Controller 会被该 @ControllerAdvice 管理
@ControllerAdvice(annotations ={TestAnnotation.class}) @Slf4j publicclass ExceptionHandlerAdvice { @ExceptionHandler(Exception.class) public String handleException(Exception e){ return"error"; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南