首页 > 其他分享 >@RestControllerAdvice注解

@RestControllerAdvice注解

时间:2023-08-29 09:44:49浏览次数:28  
标签:处理 ExceptionHandler ResponseEntity 注解 RestControllerAdvice 异常

1. @RestControllerAdvice注解 详解:
1.1 概述
@RestControllerAdvice注解是Spring MVC和Spring Boot应用程序中用于定义全局异常处理类的注解,它是@ControllerAdvice注解的特殊版本,用于RESTful风格的应用程序。@RestControllerAdvice可以捕获整个应用程序中抛出的异常,并对它们进行处理。这样可以实现在整个应用程序范围内统一处理异常的目标;

@RestControllerAdvice注解实际上是@ControllerAdvice和@ResponseBody注解的组合。这意味着,当你使用@RestControllerAdvice注解时,异常处理方法的返回值将自动转换为HTTP响应的主体;

1.2 用途:
@RestControllerAdvice注解用于创建全局异常处理类,用于捕获和处理整个应用程序中的异常。它适用于RESTful风格的应用程序,因为它自动将异常处理方法的返回值转换为HTTP响应的主体。

1.3 基本使用:
要使用@RestControllerAdvice注解,只需在类上添加该注解。这个类应包含一个或多个带有@ExceptionHandler注解的方法,用于处理不同类型的异常。

例如:

@RestControllerAdvice
public class GlobalRestExceptionHandler {
  @ExceptionHandler(UserNotFoundException.class)
  public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
  }

  @ExceptionHandler(IllegalArgumentException.class)
  public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
  }
}

1.4 属性:
@RestControllerAdvice注解继承了@ControllerAdvice注解的属性:

annotations:
用于指定需要扫描的其他注解。只有带有这些注解的类中的异常处理方法才会被全局异常处理类处理。

basePackages:
别名:value

用于指定需要扫描的包名。只有这些包下的类中的异常处理方法才会被全局异常处理类处理。

value:

是默认的属性;

用于指定要处理的异常类型。如果没有指定value属性,则默认处理所有的异常类型;

basePackageClasses:
用于指定需要扫描的类。只有这些类中的异常处理方法才会被全局异常处理类处理。

assignableTypes:
用于指定需要扫描的类或接口。只有这些类或接口的实现类中的异常处理方法才会被全局异常处理类处理。

这些属性可以帮助你限制全局异常处理类的作用范围,使其只处理特定包、类或接口下的异常。

1.5 与@ExceptionHandler的结合:
@RestControllerAdvice通常与@ExceptionHandler注解一起使用。在全局异常处理类中,你可以定义多个带有@ExceptionHandler注解的方法,用于处理不同类型的异常。当指定类型的异常在整个应用程序中抛出时,相应的`@ExceptionHandler方法将被调用以处理该异常。由于@RestControllerAdvice注解自动将异常处理方法的返回值转换为HTTP响应的主体,因此,你无需使用@ResponseBody`注解。

例如:

@RestControllerAdvice
public class GlobalRestExceptionHandler {
  @ExceptionHandler(UserNotFoundException.class)
  public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
  }

  @ExceptionHandler(IllegalArgumentException.class)
  public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
  }

  @ExceptionHandler(Exception.class)
  public ResponseEntity<String> handleException(Exception ex) {
    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An unexpected error occurred: " + ex.getMessage());
  }
}

在上面的代码中,我们定义了一个全局RESTful异常处理类,并处理了三种类型的异常:UserNotFoundException、IllegalArgumentException和Exception。对于每种异常,我们分别返回一个带有HTTP状态码和错误消息的ResponseEntity对象。由于我们使用了@RestControllerAdvice注解,异常处理方法的返回值将自动转换为HTTP响应的主体。

1.6 总结
@RestControllerAdvice注解是一个用于定义全局RESTful异常处理类的类级别注解。通过使用@RestControllerAdvice和@ExceptionHandler注解,你可以实现在整个应用程序范围内统一处理RESTful风格的异常。它自动将异常处理方法的返回值转换为HTTP响应的主体,使得代码更加简洁、可读和可维护。

@RestControllerAdvice注解特性

适用场景

适用于构建RESTful风格的Web服务,需要直接返回JSON格式响应体的场景

返回值

返回JSON格式的响应体,用于直接返回给客户端

作用

处理控制器中的异常、绑定和预处理等操作,并直接返回JSON格式的响应体,用于构建RESTful风格的Web服务

使用的注解

@ExceptionHandler、@InitBinder和@ModelAttribute等注解

返回值转换方式

直接将返回值转换为JSON格式的响应体

返回值的处理方式

直接将结果包装成HTTP响应体,并返回给客户端

 

标签:处理,ExceptionHandler,ResponseEntity,注解,RestControllerAdvice,异常
From: https://www.cnblogs.com/nyhhd/p/17663935.html

相关文章

  • springMvc常用注解与作用
    @Controller注解的作用在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返回给对应的View进行展示。在SpringMVC中提供了一个非常简便的定义Controller的方......
  • @Resource与@Autowired注解的区别
    前言1、什么是byName和byType简单来说,byName就是根据变量名去匹配bean的id属性,而byType则是根据变量类型去匹配bean的class属性。实例说明:<beanid="userService"class="com.test.UserServiceImpl"></bean>@AutowiredprivateUserServiceuserService;此处byName就是拿变量名us......
  • 类型注解Callable
    fromcollections.abcimportCallable"""Callable[[ParamType1,ParamType2],ReturnType][参数1类型,参数2类型],返回值类型Callable[[],int]是Callable[[],float]的子类型,因为int是float的子类型。这意味着,那个Callable的返回值类型经历了协变(covariant),因为......
  • SpringBoot常用注解
    前段时间学习了SpringBoot这个快速开发框架,觉得这个框架写的真的是太优秀了,尤其是SpringBoot的自动配置机制,真的是过于强大,它使我们不再需要定义样板化的配置,大大提高了程序的开发效率。在这点上,我需要解释的是SpringBoot其实是对Spring和SpringMVC框架的再封装。那么,有的......
  • 8、使用注解开发
    8、使用注解开发在Spring4之后,要使用注解开发,首先保证aop包被导入了使用注解要导入Context约束增加注解的支持Bean设置扫描某一个包下的注解<context:component-scanbase-package="com.an.pojo"></context:component-scan>属性如何注入在类上使用@Component注解来将......
  • 自定义注解实现日志打印
    首先什么是自定义注解?自定义注解是Java语言提供的一种机制,允许程序员定义自己的注解类型。注解是源代码级别的元数据,可以提供额外的信息给编译器、解析工具和运行时环境。下面是创建自定义注解的一般步骤:使用@interface关键字定义注解类型,注解类型名通常以@作为前缀,如@MyAnnotation......
  • 使用哪种注解处理后台Map参数类型,探究前端发送请求URL限制
    如何处理接口参数是Map类型探究URL限制法1:前端发送Get请求需求:为了得到分页结果,我将分页时需要的参数封装到Map中进行传递@GetMapping("/page")publicRqueryPage(@RequestParamMap<String,Object>params){}//1.测试GEThttp://localhost:8080/product/categorybrandrel......
  • Spring 常用注解
    今天给大家介绍一下Spring中的常用注解,同时这些注解也是Spring中经常用到的注解,下面我们就一起来看看都有哪些注解吧。1.@Controller在控制层使用,标识该类是SpringMVCcontroller处理器,用来创建处理http请求的对象。2.@Service在业务逻辑层使用,用于标注业务层组件。......
  • @NullSource 注解
    自动化测试过程中,需要验证某些特殊场景时,需要传空或者传nullnull参数的参数化注解 @NullSource 注解参数为空的参数化注解 @EmptySource 注解需要null和空都进行参数化,使用 @NullAndEmptySource 注解还有其他参数可以用@ValueSource继续提供importorg.junit.jup......
  • 超时处理@Timeout注解
    importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.Timeout;importstaticjava.lang.Thread.sleep;classTimeoutExampleTest{@Test@Timeout(7)voidtimeoutDemo1()throwsInterruptedExceptio......