SpringBoot常用注解@RestControllerAdvice详解

 更新时间:2024年01月16日 10:13:54   作者:user2025  
这篇文章主要介绍了SpringBoot常用注解@RestControllerAdvice详解,@RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,因此@RestControllerAdvice本质上是个Component,需要的朋友可以参考下

@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  
public class GlobalController{  
    //(1)全局数据绑定
    //应用到所有@RequestMapping注解方法  
    //此处将键值对添加到全局,注解了@RequestMapping的方法都可以获得此键值对  
    @ModelAttribute 
    public void addUser(Model model) {   
        model.addAttribute("msg", "此处将键值对添加到全局,注解了@RequestMapping的方法都可以获得此键值对");  
    }    
    //(2)全局数据预处理
    //应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器  
    //用来设置WebDataBinder  
    @InitBinder("user")
    public void initBinder(WebDataBinder binder) {
    }    
    // (3)全局异常处理
    //应用到所有@RequestMapping注解的方法,在其抛出Exception异常时执行  
    //定义全局异常处理,value属性可以过滤拦截指定异常,此处拦截所有的Exception  
    @ExceptionHandler(Exception.class)    
    public String handleException(Exception e) {    
        return "error";
    }    
}  

@ControllerAdvice可以指定 Controller 范围

  • basePackages: 指定一个或多个包,这些包及其子包下的所有 Controller 都被该 @ControllerAdvice 管理
@RestControllerAdvice(basePackages={"top.onething"})
@Slf4j
public class ExceptionHandlerAdvice {    
    @ExceptionHandler(Exception.class)    
    public String handleException(Exception e) {    
        return "error";
    }   
} 
  • basePackageClasses: 是 basePackages 的一种变形,指定一个或多个 Controller 类,这些类所属的包及其子包下的所有 Controller 都被该 @ControllerAdvice 管理
@RestControllerAdvice(basePackageClasses={TestController.class})
@Slf4j
public class ExceptionHandlerAdvice {
	@ExceptionHandler(Exception.class)    
    public String handleException(Exception e) {    
        return "error";
    } 
}  
  • assignableTypes: 指定一个或多个 Controller 类,这些类被该 @ControllerAdvice 管理
@RestControllerAdvice(assignableTypes={TestController.class})
@Slf4j
public class ExceptionHandlerAdvice {
	@ExceptionHandler(Exception.class)    
    public String handleException(Exception e) {    
        return "error";
    } 
}  
  • annotations: 指定一个或多个注解,被这些注解所标记的 Controller 会被该 @ControllerAdvice 管理
@ControllerAdvice(annotations = {TestAnnotation.class})
@Slf4j
public class ExceptionHandlerAdvice {
	@ExceptionHandler(Exception.class)    
    public String handleException(Exception e) {    
        return "error";
    } 
} 

到此这篇关于SpringBoot常用注解@RestControllerAdvice详解的文章就介绍到这了,更多相关@RestControllerAdvice注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JDK21无法导入TimeUnit类的解决办法

    JDK21无法导入TimeUnit类的解决办法

    这篇文章主要给大家介绍了关于JDK21无法导入TimeUnit类的解决办法,TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),需要的朋友可以参考下
    2024-01-01
  • IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法

    IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法

    spring-boot是一个基于Java的开源框架,用于快速构建生产级别的应用程序,这篇文章主要给大家介绍了关于IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法,需要的朋友可以参考下
    2024-07-07
  • Java中的@Builder注解问题详解

    Java中的@Builder注解问题详解

    这篇文章主要介绍了Java中的@Builder注解详解,@Builder 注解的其中一个大坑会导致默认值失效,这是使用此注解出现的一个问题,总的来说,不推荐再使用 @Builder 注解,接下来讲重点介绍其原因和替代方案,需要的朋友可以参考下
    2023-10-10
  • springboot排除某些自动配置的操作方法

    springboot排除某些自动配置的操作方法

    Spring Boot 提供的自动配置非常强大,某些情况下,自动配置的功能可能不符合我们的需求,需要我们自定义配置,这个时候就需要排除/禁用Spring Boot 某些类的自动化配置了,本文给大家介绍springboot排除某些自动配置的方法,感兴趣的朋友一起看看吧
    2023-08-08
  • 为何Java单例模式我只推荐两种

    为何Java单例模式我只推荐两种

    这篇文章主要给大家介绍了关于Java单例模式推荐的两种模式,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Java中的逃逸问题心得

    Java中的逃逸问题心得

    本篇文章是作者在学习了Java中的逃逸相关知识后的心得分享,一起跟着小编学习下。
    2018-02-02
  • Spring RestTemplate的使用与踩坑

    Spring RestTemplate的使用与踩坑

    RestTemplate是一个执行HTTP请求的同步阻塞式工具类,它仅仅只是在HTTP客户端库基础上,封装了更加简单易用的模板方法API,方便程序员利用已提供的模板方法发起网络请求和处理,能很大程度上提升我们的开发效率
    2023-02-02
  • spring data jpa 查询自定义字段,转换为自定义实体方式

    spring data jpa 查询自定义字段,转换为自定义实体方式

    这篇文章主要介绍了spring data jpa 查询自定义字段,转换为自定义实体方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • SpringBoot项目启动过程动态修改接口请求路径的解决方案

    SpringBoot项目启动过程动态修改接口请求路径的解决方案

    在SpringBoot服务整合过程中,遇到了多个服务中相同RequestMapping路径导致的启动问题,解决方案是通过修改RequestMappingHandlerMapping类的getMappingForMethod方法,本文给大家介绍SpringBoot修改接口请求路径的解决方案,感兴趣的朋友一起看看吧
    2024-09-09
  • 实例讲解Java中的synchronized

    实例讲解Java中的synchronized

    这篇文章主要介绍了Java中synchronized的使用方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论