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日

相关文章

  • 完美解决在eclipse上部署Tomcat时出现8080等端口被占用的问题

    下面是完美解决在eclipse上部署Tomcat时出现8080等端口被占用的问题的完整攻略。 问题描述 在使用eclipse部署Tomcat时,可能会出现端口被占用的问题,比如8080端口被占用导致Tomcat无法启动。 解决方案 方案一:使用不同的端口号 可以修改Tomcat的端口号,使用不同的端口号来避免端口冲突。具体步骤如下: 在eclipse中找到S…

    Java 2023年6月2日
    00
  • 深入了解Springboot核心知识点之数据访问配置

    深入了解Spring Boot核心知识点之数据访问配置 Spring Boot是一个非常流行的Java框架,它提供了许多便利的功能,其中包括数据访问。在本文中,我们将深入了解Spring Boot的数据访问配置,包括如何配置数据源、如何使用JdbcTemplate和如何使用Spring Data JPA。 配置数据源 在Spring Boot中,我们可以使用…

    Java 2023年5月15日
    00
  • js插件YprogressBar实现漂亮的进度条效果

    下面是详细的“js插件YprogressBar实现漂亮的进度条效果”的完整攻略。 什么是 YprogressBar YprogressBar 是一个基于 jQuery 的 JavaScript 插件,用于实现网页进度条效果。它可以让进度条随着页面的加载而不断变化,既简单又漂亮,非常适合用于页面加载、文件上传等场合。 YprogressBar 的使用步骤 步骤…

    Java 2023年6月16日
    00
  • SpringMVC拦截器的实现和作用及Redis登陆功能的优化详解

    SpringMVC拦截器的实现和作用及Redis登陆功能的优化详解 SpringMVC拦截器的实现和作用 SpringMVC拦截器是一种在请求到达控制器之前或之后执行的组件。它可以用于实现一些通用的功能,例如日志记录、权限验证、请求参数验证等。下面是实现SpringMVC拦截器的步骤: 步骤一:创建拦截器类 我们可以在“src/main/java/com/e…

    Java 2023年5月17日
    00
  • JavaSwing基础之Layout布局相关知识详解

    JavaSwing是用于开发桌面应用程序的一套GUI工具包,其中Layout布局是Swing中常用的一种布局方式。此篇文章将详细讲解Layout布局的相关知识,为JavaSwing的使用提供帮助。 布局方式 Swing提供了多种布局方式,其中常见的有FlowLayout、BorderLayout、GridLayout、GridBagLayout、BoxLay…

    Java 2023年5月26日
    00
  • java web上传文件和下载文件代码片段分享

    下面我为大家讲解一下Java Web中如何进行文件上传和下载操作。 文件上传 HTML表单 与普通的HTML表单类似,文件上传表单需要指定enctype属性为multipart/form-data。例如: <form method="post" action="upload" enctype="mult…

    Java 2023年5月20日
    00
  • 一个简单的SpringBoot项目快速搭建详细步骤

    下面是一个简单的Spring Boot项目快速搭建的详细步骤: 1. 创建项目 创建新的Maven项目,使用Spring Boot Initializer或直接通过IDEA、Eclipse等集成开发工具来创建一个空的Maven项目。在创建过程中,可以选择使用哪些依赖项作为项目的基础。Spring Boot Initializer会提供一些预置了基础配置的项目…

    Java 2023年5月15日
    00
  • SpringMVC源码解读之HandlerMapping – AbstractUrlHandlerMapping系列request分发

    简介 在Spring MVC中,HandlerMapping是一个非常重要的组件,它负责将请求分发给对应的处理器。AbstractUrlHandlerMapping是HandlerMapping的一个实现类,它通过URL映射规则来确定请求应该由哪个处理器来处理。本文将详细介绍AbstractUrlHandlerMapping的源码实现,并提供两个示例说明。 …

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