springBoot2.X配置全局捕获异常的操作

本文主要介绍如何使用 Spring Boot 2.x 配置全局的异常处理器。具体的步骤如下:

步骤一:新建异常处理器

首先,我们需要新建一个异常处理器类 GlobalExceptionHandler,该类需要实现 ErrorController 接口和 @RestControllerAdvice 注解。代码如下:

@RestControllerAdvice
public class GlobalExceptionHandler implements ErrorController {

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

    @ExceptionHandler(Exception.class)
    public ResponseEntity<Object> handleException(Exception ex) {
        // 自定义返回格式的逻辑
        return new ResponseEntity<>("System error", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

在上面的代码中,我们使用了 @RestControllerAdvice 注解,该注解可以让 Spring 识别该类为全局异常处理器。在 handleException 方法中,我们可以针对不同的异常类型处理不同的逻辑。在这里,我们简单地返回了一个 "System error" 字符串,同时返回状态码 500

步骤二:配置异常处理器

接下来,我们需要将异常处理器注册到 Spring 中。可以使用 @ControllerAdvice 注解或 WebMvcConfigurer 接口完成。

ControllerAdvice 注解中,可以指定需要扫描的包,示例代码如下:

@RestControllerAdvice(basePackages = "com.example")
public class GlobalExceptionHandler { … }

WebMvcConfigurer 接口中,可以覆盖 extendHandlerExceptionResolvers 方法,该方法将用于注册全局异常处理器。示例代码如下:

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Autowired
    private GlobalExceptionHandler globalExceptionHandler;

    @Override
    public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        resolvers.add(globalExceptionHandler);
    }
}

示例一:处理自定义异常

在实际的开发中,我们通常不会将所有的异常都处理成相同的格式。下面是处理自定义异常的示例代码。

首先,我们需要新建一个自定义异常类,并指定异常响应格式。代码如下:

public class BusinessException extends RuntimeException {

    private String errCode;
    private String errMsg;

    public BusinessException(String errCode, String errMsg) {
        super(errMsg);
        this.errCode = errCode;
        this.errMsg = errMsg;
    }

    // getter and setter
}

接下来,我们在全局异常处理器中添加处理自定义异常的逻辑:

@ExceptionHandler(BusinessException.class)
public ResponseEntity<Object> handleBusinessException(BusinessException ex) {
    return new ResponseEntity<>(new BusinessExceptionResponse(ex.getErrCode(), ex.getErrMsg()), HttpStatus.BAD_REQUEST);
}

handleBusinessException 方法中,我们返回了一个 BusinessExceptionResponse 对象,该对象包含了自定义异常的响应格式。最后,我们需要在自定义异常中添加 getter 和 setter 方法。

示例二:处理 Web 服务器异常

在 Web 应用中,很多时候都会出现 Web 服务器异常,例如 404、500 等状态码。下面是处理 Web 服务器异常的示例代码。

首先,我们需要在全局异常处理器中添加处理 Web 服务器异常的逻辑:

@ExceptionHandler(value = { NoHandlerFoundException.class, HttpRequestMethodNotSupportedException.class })
public ResponseEntity<Object> handleWebServerException(Exception ex, HttpServletRequest request) {
    HttpStatus status = getStatus(request);
    return new ResponseEntity<>("Web server error", status);
}

private HttpStatus getStatus(HttpServletRequest request) {
    Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
    if (statusCode == null) {
        return HttpStatus.INTERNAL_SERVER_ERROR;
    }
    return HttpStatus.valueOf(statusCode);
}

在上面的代码中,我们使用了两个异常类型 NoHandlerFoundException and HttpRequestMethodNotSupportedException,分别用于处理 404 和 405 异常。在 handleWebServerException 方法中,我们返回了一个 "Web server error" 字符串,同时返回对应状态码,该状态码通过 getStatus 方法获取。

至此,全局捕获异常的操作已经完整地讲述了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springBoot2.X配置全局捕获异常的操作 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • SpringMVC的源码解析

    SpringMVC的源码解析攻略 SpringMVC是Spring框架中一个重要的模块,具有在Web开发中的优秀表现,如显式的分层体系结构、松散耦合、组件重用、可配置性和可扩展性。通过对SpringMVC的源码进行深入学习,可以更好地理解SpringMVC框架的设计原理、底层实现和优化方法。 以下是SpringMVC源码解析的完整攻略。 1. SpringM…

    Java 2023年5月16日
    00
  • JS求多个数组的重复数据

    如果想要求多个数组中的重复数据,可以使用以下方法: 定义一个函数,接收多个数组作为参数; 对于每个数组,遍历其中的每一个元素,判断该元素在其他数组中是否也存在; 如果其他数组中也存在该元素,则说明该元素是多个数组中的重复数据,将其添加到结果数组中; 返回结果数组。 代码如下: function findDuplicates(…arrays) { cons…

    Java 2023年5月26日
    00
  • 【IntelliJ IDEA】Maven构建自己的第一个Java后台的方法

    下面我为您详细讲解使用IntelliJ IDEA和Maven构建自己的第一个Java后台的方法: 准备工作 安装Java JDK并设置环境变量。 安装IntelliJ IDEA。 安装Maven。 创建Maven项目 打开IntelliJ IDEA,选择“Create New Project”。 选择“Maven”项目类型,然后点击“Next”。 输入项目信…

    Java 2023年6月2日
    00
  • Java中启动线程start和run的两种方法

    启动线程是Java并发编程中的重要话题。在Java中,启动线程有两种方法,分别是调用Thread类的start()方法和直接调用run()方法。 为什么要使用线程 在Java中,线程的创建和启动可以让程序并发执行,实现多任务的处理。进程是由操作系统进行资源分配和调度的,而线程是在进程的基础上创建的,可以利用CPU时间片轮流获得执行时间。这样就可以让程序在一定…

    Java 2023年5月26日
    00
  • java高级用法之JNA中的Structure

    下面详细讲解一下Java高级用法之JNA中的Structure: 什么是JNA? JNA全称为Java Native Access,它是一个开源的Java库,可以让Java程序无需写任何Native代码实现直接访问本地DLL、 shared libraries和C等 Native语言编写的动态库(so)等。 Structure在JNA中的作用 在JNA中,S…

    Java 2023年5月26日
    00
  • 对Java字符串与整形、浮点类型之间的相互转换方法总结

    下面是“对Java字符串与整形、浮点类型之间的相互转换方法总结”的攻略。 1. Java字符串转整型 Java字符串可以通过Integer类的静态方法parseInt()实现转换成整型数据。具体语法如下: String s = "123"; int i = Integer.parseInt(s); // 这里的i值为123 同样的,如果字…

    Java 2023年5月27日
    00
  • 微信小程序静默登录的实现代码

    当用户第一次使用微信小程序时,通常需要通过微信授权登录才能使用小程序的部分或全部功能。但是在某些情况下,我们可能需要实现小程序的静默登录,即在用户未授权的情况下实现自动登录。 以下是实现微信小程序静默登录的攻略及代码示例: 步骤一:获取用户openid 可以通过小程序提供的wx.login()方法获取用户的临时登录凭证code,然后将code发送至后端服务器…

    Java 2023年5月23日
    00
  • springMVC的生命周期详解

    Spring MVC的生命周期详解 Spring MVC是什么 Spring MVC 是构建于 Spring Framework 之上的一个与 Servlet API 无关的 Web 框架。相比于传统的 Servlet,使用 Spring MVC 可以更快地开发 Web 应用程序,它也更加灵活、可扩展和可配置。 Spring MVC的生命周期 Spring …

    Java 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部