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类即可。

目录
相关文章
|
2月前
|
Java 开发者 UED
Spring Boot的全局异常处理机制
【2月更文挑战第13天】
68 0
|
4月前
|
Java Spring
【Spring Boot】logback和log4j日志异常处理
【1月更文挑战第25天】【Spring Boot】logback和log4j日志异常处理
|
4月前
|
Dubbo Java 应用服务中间件
微服务框架(十四)Spring Boot @ControllerAdvice异常处理
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Spring Boot使用@ControllerAdvice进行自定义异常捕捉
|
7月前
|
前端开发 Java API
Spring MVC异常处理
Spring MVC异常处理
35 0
|
5月前
|
应用服务中间件
Spring-boot启动失败 Unregistering JMX-exposed beans on shutdown 异常处理
Spring-boot启动失败 Unregistering JMX-exposed beans on shutdown 异常处理
65 0
|
2月前
|
Java 编译器 API
Spring Boot 异常处理
Java异常分为 Throwable 类的两个子类:Error 和 Exception。Error 是不可捕获的,由JVM处理并可能导致程序终止,如 OutOfMemoryError。Exception 是可捕获的,包括运行时异常如 ArrayIndexOutOfBoundsException 和编译时异常如 IOException。
14 1
|
2月前
|
Java 数据库 开发者
|
7月前
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
35 0
|
4月前
|
前端开发 Java UED
如何使用 Spring Boot 实现全局异常处理
如何使用 Spring Boot 实现全局异常处理
|
5月前
|
前端开发 Java UED
解密Spring MVC异常处理:从局部到全局,打造稳固系统的关键步骤
解密Spring MVC异常处理:从局部到全局,打造稳固系统的关键步骤
72 0