Spring基础篇:统一异常处理

简介: 统一异常处理
我们编写的Web程序,在运行过程中难免会遇到许多不同的异常。这么多异常如何处理起来比较合理呢?应该是放在一个统一处理异常的地方,这样不但能保持代码清爽,而且对异常的管理会方便。

学习解决异常时,通常有两种办法:

  1. 使用try...catch,用try包裹住执行的代码,异常交给catch捕获。
  2. 直接使用throw将异常丢出去。

使用第一种方法解决异常会有一个问题,如同样的一个异常A,在多个地方:ControllerServiceDao都出现了,要处理异常我们就需要在多个地方写try...catch不太好

使用第二种方法,将异常抛出去,但总归还是得有个地方去解决吧,因为Controller在服务器的三层架构中的是属于最上的(靠近用户),所以我们可以将所有的异常都抛到Controller这一层去解决,而Spring给我们提供了在这一层的AOP方法,这种方法叫:@ControllerAdvice,它可以配合@ExceptionHandler帮助我们统一的处理异常。

编写统一的异常处理类

我们需要做的事情非常简单,直接定义一个处理异常的类:ExceptionHandler

public class ExceptionHandler {

}

然后在这个类上加上@ControllerAdvice注解,表示它是给Controller加强的。

@ControllerAdvice
public class ExceptionHandler {

}

接下去我们需要编写拦截什么异常进行处理,需要用到@ExceptionHandler,它的value值传入处理异常的类。

@ControllerAdvice
public class ExceptionHandler {
    @ExceptionHandler(RuntimeException.class)
    // 拦截到后执行的方法
}

比如说这里拦截到RuntimeException.class异常,拦截到后需要执行一些特定的方法


@ControllerAdvice
public class ExceptionHandler {
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public String handleRuntimeException(RuntimeException e) {
        e.printStackTrace();
        // 返回 error 就相当于跳转到 error.jsp 页面。
        return "error";
    }
}

这里做了两件事情:

  1. 打印了一下错误信息。
  2. 会将"error",作为响应体数据返回。(因为用了@ResponseBody

自定义异常

我们还可以自定义异常,然后被捕获(被捕获的前提就是,你在分析代码可能出错的地方将错误通过throw抛出)

而自定义异常非常简单,只需要继承Exception类即可。

目录
相关文章
|
Java 开发者 UED
Spring Boot的全局异常处理机制
【2月更文挑战第13天】
1051 0
|
Java Spring
【Spring Boot】logback和log4j日志异常处理
【1月更文挑战第25天】【Spring Boot】logback和log4j日志异常处理
|
Dubbo Java 应用服务中间件
微服务框架(十四)Spring Boot @ControllerAdvice异常处理
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Spring Boot使用@ControllerAdvice进行自定义异常捕捉
|
4月前
|
JSON Java 数据库
第08课:Spring Boot中的全局异常处理
第08课:Spring Boot中的全局异常处理
660 0
|
8月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
本文介绍了在Spring Boot项目中如何通过创建`GlobalExceptionHandler`类来全局处理系统异常。通过使用`@ControllerAdvice`注解,可以拦截项目中的各种异常,并结合`@ExceptionHandler`注解针对特定异常(如参数缺失、空指针等)进行定制化处理。文中详细展示了处理参数缺失异常和空指针异常的示例代码,并说明了通过拦截`Exception`父类实现统一异常处理的方法。虽然拦截`Exception`可一劳永逸,但为便于问题排查,建议优先处理常见异常,最后再兜底处理未知异常,确保返回给调用方的信息友好且明确。
1169 0
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
|
8月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
417 0
|
8月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——定义返回的统一 json 结构
本课主要讲解Spring Boot中的全局异常处理方法。在项目开发中,各层操作难免会遇到各种异常,若逐一处理将导致代码耦合度高、维护困难。因此,需将异常处理从业务逻辑中分离,实现统一管理与友好反馈。本文通过定义一个简化的JsonResult类(含状态码code和消息msg),结合全局异常拦截器,展示如何封装并返回标准化的JSON响应,从而提升代码质量和用户体验。
226 0
|
12月前
|
开发框架 Java UED
如何使用 Spring Boot 实现异常处理
如何使用 Spring Boot 实现异常处理
506 2
|
Java Spring UED
Spring框架的异常处理秘籍:打造不败之身的应用!
【8月更文挑战第31天】在软件开发中,异常处理对应用的稳定性和健壮性至关重要。Spring框架提供了一套完善的异常处理机制,包括使用`@ExceptionHandler`注解和配置`@ControllerAdvice`。本文将详细介绍这两种方式,并通过示例代码展示其具体应用。`@ExceptionHandler`可用于控制器类中的方法,处理特定异常;而`@ControllerAdvice`则允许定义全局异常处理器,捕获多个控制器中的异常。
181 0
|
Java API 开发者
【开发者福音】Spring Boot 异常处理:优雅应对错误,提升应用健壮性,让调试不再是噩梦!
【8月更文挑战第29天】本文通过对比传统错误处理方式与Spring Boot推荐的最佳实践,展示了如何在Spring Boot应用中实现统一且优雅的异常处理。传统方法需在每个可能出错的地方显式处理异常,导致代码冗余且不一致。而Spring Boot的全局异常处理机制则能集中处理所有异常,简化代码并确保错误响应格式统一,提高应用程序的健壮性和可维护性。文中提供了具体的示例代码以帮助读者更好地理解和应用这一机制。
503 0

热门文章

最新文章

下一篇
oss云网关配置