首页 > 其他分享 >如何在SpringBoot应用中实现异常处理?

如何在SpringBoot应用中实现异常处理?

时间:2024-06-11 09:59:38浏览次数:28  
标签:DataNotFoundException SpringBoot ExceptionHandler public ResponseEntity 应用 异常 cl

在Spring Boot应用中实现异常处理通常有以下几种方式:

1. Controller级别的异常处理:使用@ExceptionHandler

你可以使用@ExceptionHandler注解来处理特定Controller中的异常。这让你能定义如何处理在你的Controller方法中抛出的异常。这是一个处理同一Controller内多个处理方法可能抛出的相同异常的有效方式。

@Controller
public class MyController {

    @ExceptionHandler(DataNotFoundException.class)
    public ResponseEntity<String> handleDataNotFound(DataNotFoundException exception) {
        return new ResponseEntity<>(exception.getMessage(), HttpStatus.NOT_FOUND);
    }
}

这个例子中,如果在MyController中任何一个请求映射方法抛出DataNotFoundExceptionhandleDataNotFound方法就会被调用。

2. 全局异常处理:使用@ControllerAdvice

为了应用更全局的处理方式,你可以创建一个使用@ControllerAdvice注解的类。里面可以定义一个或多个使用@ExceptionHandler注解的方法,这些方法将应用于你的整个Spring应用程序。

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(DataNotFoundException.class)
    public ResponseEntity<String> handleDataNotFound(DataNotFoundException exception) {
        return new ResponseEntity<>(exception.getMessage(), HttpStatus.NOT_FOUND);
    }
    
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleAllUncaughtException(Exception exception) {
        // 确保日志记录下所有未捕获的异常
        return new ResponseEntity<>("Internal server error", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

GlobalExceptionHandler类中,所有的Controller都会应用@ExceptionHandler中定义的行为。

3. @ResponseStatus注解

你可以在自定义异常上使用@ResponseStatus注解,这样当该异常被抛出时,Spring会自动使用这个注解描述的状态码作为HTTP响应状态码。

@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Data not found")
public class DataNotFoundException extends RuntimeException {
    // ...
}

4. 实现ErrorController

你可以创建一个控制器来实现ErrorController接口,并定义@RequestMapping来处理/error路径,这是处理所有类型的错误的另一种方法。

@Controller
public class CustomErrorController implements ErrorController {

    @RequestMapping("/error")
    public String handleError(HttpServletRequest request) {
        // 获取错误属性并显示自定义视图或返回信息
        return "error";
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

通过继承ErrorController,你可以提供处理所有异常和错误的自定义逻辑。

5. ResponseEntityExceptionHandler

Spring提供了一个ResponseEntityExceptionHandler基类,你可以扩展它来定制自己的异常处理逻辑。这个类在@ControllerAdvice类中特别有用。

@ControllerAdvice
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(DataNotFoundException.class)
    protected ResponseEntity<Object> handleDataNotFound(
        DataNotFoundException exception, HttpHeaders headers, HttpStatus status, WebRequest request) {
        // 创建并返回适当的ResponseEntity对象
    }
}

总结

Spring Boot提供了若干种灵活的异常处理方法。在实现异常处理时,你可以根据具体需求选择最适合你应用场景的策略。通常情况下,组合使用@ControllerAdvice@ExceptionHandler对全局异常处理而且配置简单的情况下非常有用,而ErrorControllerResponseEntityExceptionHandler提供了更多的自定制灵活性。

标签:DataNotFoundException,SpringBoot,ExceptionHandler,public,ResponseEntity,应用,异常,cl
From: https://blog.csdn.net/m0_68948067/article/details/139322781

相关文章

  • dubbo~全局异常拦截器的使用与设计缺陷~续
    上一次的介绍,主要围绕如何统一去捕获异常,以及为每一种异常添加自己的Mapper实现,并且我们知道,当在ExceptionMapper中返回非200的Response,不支持application/json的响应类型,而是写死的text/plain类型。Filter为二方包异常手动捕获参考:https://blog.csdn.net/2401_84048290/article......
  • SpringBoot Minio 分片上传
    1、简介分片上传通常被用于各种需要处理大文件的场景,如视频平台、云存储服务等。它不仅可以加速文件上传过程,还可以提高系统的稳定性和容错性。简单来说就是:1)把大文件分割成多个小文件(比如每个5MB)2)逐个/并发上传小文件3)所有小文件都上传完后,将所有小文件合并成大文件2、主流上......
  • Android 11.0 mtk浏览器Browser下载应用不能安装问题的解决办法
    1.前言 在系统11.0的ROM定制化开发中,在开发mtk平台的时候,在系统默认浏览器Browser中发现在下载某些app的时候,结果显示的确实在下载到内部存储的时候,点击安装的时候安装失败,所以就需要从Browser的下载流程中出发分析相关源码来实现具体的功能2.mtk浏览器Browser下载应用不能......
  • SpringBoot 学习笔记
    表示层>业务层>持久层>数据库使用分层结构进行解耦表示层controller包用来存放表示层的各种动作类。命名规范:xxxController如何让一个类变为动作类:使用@RestControl注解packagecom.hello.controller;@RestController//让SpringBoot认识这个类是动作类pu......
  • 使用微信小程序开发制作一个简易的健身计划应用
    小程序名称:FitPlan健身计划概述:FitPlan是一个简易的健身计划小程序,旨在帮助用户制定和管理自己的健身计划。用户可以根据自己的身体状态、目标和时间安排进行定制化的健身计划,并通过小程序进行记录和监督。功能需求:用户登录和注册功能:用户可以通过微信登录或注册账号来使......
  • .NET 使用 OpenTelemetry metrics 监控应用程序指标
    上一次我们讲了OpenTelemetryLogs与OpenTelemetryTraces。今天继续来说说OpenTelemetryMetrics。随着现代应用程序的复杂性不断增加,对于性能监控和故障排除的需求也日益迫切。在.NET生态系统中,OpenTelemetryMetrics可用于实时监控和分析应用程序的性能指标。比如监控......
  • Python异常处理的几种方法
    Python的异常处理语句主要包括以下几个关键字:try/excepttry块包含可能会引发异常的代码。except块则包含用于处理这些异常的代码。try:#尝试执行的代码块result=10/0exceptZeroDivisionError:#当发生ZeroDivisionError异常时执行的代码块......
  • 基于微信小程序+Springboot校园二手商城系统设计和实现
    \n文末获取源码联系感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询一、前言介绍:在当今社会的高速发展过程中,产生的劳动力越来越大,提高人们的生活水平和质量,尤其计算机科技的进步,数据和信息以人兴化为本的目的,给人们提供优质的服务,其......
  • 基于微信小程序+Springboot线上租房平台设计和实现【三端实现小程序+WEB响应式用户前
    感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询一、前言介绍:近年来,我国的社会经济迅猛发展,社会对于房屋租赁的需求也在不断增多。在房屋租赁企业中面对繁琐而又庞大的信息量,为了企业和人们可以更好的了解和最快知道最新的房源信息。......
  • SpringBoot 使用 Zookeeper 实现分布式锁
    之前的博客介绍过zookeeper的分布式锁,只不过是基于Spring的实现(技术太老了),现在肯定使用SpringBoot进行实现,因此有必要再写一篇博客。有关zookeeper的部署,以及分布式锁细节,这里不再赘述,可以访问我之前编写的博客。zookeeper的单机和集群部署:https://www.cnblogs.com/stu......