首页 > 其他分享 >SpringBoot 全局异常处理

SpringBoot 全局异常处理

时间:2023-06-08 09:46:28浏览次数:58  
标签:ControllerAdvice SpringBoot 处理 ExceptionHandler 注解 全局 异常 public

SpringBoot 全局异常处理

在使用 SpringBoot 开发 Web 应用时,异常处理是必不可少的一部分。在应用中,异常可能会出现在任何地方,例如在控制器、服务层、数据访问层等等。如果不对异常进行处理,可能会导致应用崩溃或者出现未知的错误。因此,对于异常的处理是非常重要的。

在 SpringBoot 中,有多种方式可以对异常进行处理,本文将介绍其中的三种方式。

1. 使用@ControllerAdvice 注解

@ControllerAdvice 是 SpringBoot 提供的一个注解,用于定义全局异常处理器。在使用@ControllerAdvice 注解时,需要使用@ExceptionHandler 注解来指定处理的异常类型。

下面是一个使用@ControllerAdvice 注解的例子:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
    }
}

在上面的例子中,我们使用@ControllerAdvice 注解定义了一个全局异常处理器,然后使用@ExceptionHandler 注解指定了要处理的异常类型为 Exception。当应用中出现 Exception 类型的异常时,就会调用 handleException 方法来处理异常。

2. 使用@ExceptionHandler 注解

除了使用@ControllerAdvice 注解外,还可以在控制器中使用@ExceptionHandler 注解来处理异常。这种方式的好处是可以针对不同的控制器方法定义不同的异常处理器。

下面是一个使用@ExceptionHandler 注解的例子:

@RestController
public class UserController {

    @Autowired
    private UserService userService;

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

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = userService.getUserById(id);
        if (user == null) {
            throw new UserNotFoundException("User not found");
        }
        return ResponseEntity.ok(user);
    }
}

在上面的例子中,我们在控制器中定义了一个 handleUserNotFoundException 方法,用于处理 UserNotFoundException 类型的异常。当 getUser 方法中出现 UserNotFoundException 类型的异常时,就会调用 handleUserNotFoundException 方法来处理异常。

3. 使用 HandlerExceptionResolver 接口

除了使用@ControllerAdvice 注解和@ExceptionHandler 注解外,还可以实现 HandlerExceptionResolver 接口来处理异常。这种方式比较灵活,可以自定义异常处理器的实现方式。

下面是一个使用 HandlerExceptionResolver 接口的例子:

public class GlobalExceptionHandler implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", ex);
        mav.setViewName("error");
        return mav;
    }
}

在上面的例子中,我们实现了 HandlerExceptionResolver 接口,并重写了 resolveException 方法来处理异常。当应用中出现异常时,就会调用 resolveException 方法来处理异常。

总结:

在本文中,我们介绍了 SpringBoot 中三种处理异常的方式,分别是使用@ControllerAdvice 注解、@ExceptionHandler 注解和 HandlerExceptionResolver 接口。这些方式各有优缺点,开发者可以根据自己的需求选择适合自己的方式来处理异常。

JetBrains全家桶激活,持续跟随Jetbrains软件版本更新中……

Arcstack资源社区

Github Idea激活码永久有效

Gitee Idea激活码永久有效

关注VX-公众号【顶尖架构师栈,回复 C01 获取超10G后端学习面试资源
顶尖架构师栈这里有无数干货

标签:ControllerAdvice,SpringBoot,处理,ExceptionHandler,注解,全局,异常,public
From: https://www.cnblogs.com/dc-s/p/17465268.html

相关文章

  • JAVA的springboot+vue企业客户信息反馈平台,附源码+数据库+文档+PPT
    1、项目介绍企业客户信息反馈平台能够通过互联网得到广泛的、全面的宣传,让尽可能多的用户了解和熟知企业客户信息反馈平台的便捷高效,不仅为客户提供了服务,而且也推广了自己,让更多的客户了解自己。对于企业客户信息反馈而言,若拥有自己的平台,通过平台得到更好的管理,同时提升了形象......
  • Shiro自定义异常无法被捕获总是抛出AuthenticationException解决方案
    问题描述配置Realm之后,发现在Realm中抛出的异常被无法捕获,最后抛出AuthenticationException异场景再现 下面是errorlog2023-06-0711:49:26.131[TID:N/A][][http-nio-9]ERRORo.s.c.sleuth.instrument.web.ExceptionLoggingFilter:54-Uncaughtexceptionthrow......
  • AI安防视频融合平台EasyCVR服务启动异常的原因排查与解决
    EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持多协议、多类型的设备接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。有用户反馈,EasyCVR服务启动成功后,平台无法访问,......
  • 记录一次.NET6环境使用Visual Studio 2022 V17.6.2版本的异常
    开发环境C#开发环境VisualStudio2022V17.6.2版本。目标框架:.NET6.0错误内容:系统是BlazorServer框架的系统页面,在使用VisualStudio2022V17.6.2版本编译后,执行出现:TimeStamp:2023/6/613:35:07MachineName:Light.YangAppDomainName:SajetServerAppOS:Microsoft......
  • 异常处理
    1. SpringMVC 框架处理异常的常用方式: 561.1 异常处理:  56springmvc框架采用的是统一,全局的异常处理。把controller中的所有异常处理都集中到一个地方。 采用的是aop的思想。把业务逻辑和异常处理代码分开。解耦合。1.2 使用两个注解  561.@ExceptionHandler2.@Controlle......
  • Java7新特性: 多异常捕获
    在Java7中引入了一种新的异常处理机制,即多异常捕获。在之前的版本中,我们通常使用单个catch块来捕获所有可能抛出的异常。但是,这种方式可能导致代码变得冗长且难以阅读。多异常捕获机制可以使代码更加简洁、易读,并且可以更准确地处理不同类型的异常情况。接下来就让我们大家一起来看......
  • SpringBoot入门
    HelloWorld需求:浏览器发送/hello请求,响应Hello,SpringBoot创建springboot项目主程序类@SpringBootApplicationpublicclassBoot01HelloworldApplicationpublicstaticvoidmain(String[]args){SpringApplication.run(Boot01HelloworldApplication.cl......
  • springboot集成swagger
    引入并配置引入依赖这里引入的是3版本<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version></dependency>配置拦截器(若有,则配置)该配置是在有使用到拦截器,例如鉴权的拦截,就需要配置拦截器放......
  • java.lang.OutOfMemoryError:GC overhead limit exceeded异常
    java.lang.OutOfMemoryError异常解决方法 原因:常见的有以下几种:1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;3.代码中存在死循环或循环产生过多重复的对象实体;4.使用的第三方软件中的BUG;5.启动参数内存......
  • SpringBoot之Spring Data JPA入门学习
    JPA(JavaPersistenceAPI)Java持久化API,是Java持久化的标准规范,Hibernate是持久化规范的技术实现,而SpringDataJPA是在Hibernate基础上封装的一款框架。一、添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</a......