Spring boot集中异常处理方法实例

Spring Boot集中异常处理方法实例

在Spring Boot应用程序中,异常处理是非常重要的一个方面,我们必须合理选择一种异常机制来优雅地处理系统中的所有异常情况。本文介绍了如何通过集中的异常处理来优雅地处理Spring Boot中的所有异常情况。具体来说,我们将使用@ControllerAdvice,@ExceptionHandler和自定义异常来实现。

@ControllerAdvice

@ControllerAdvice注释是一个特定类型的@component用于定义全局控制器的异常处理程序。它是一种方便的方法,用于将@ExceptionHandler方法应用于整个控制器中的许多控制器类。

@ControllerAdvice注释被用作增强控制器。 在Spring MVC中,控制器通常有方法处理HTTP请求。 这些@ExceptionHandler方法处理在控制器执行过程中发生的异常。

@ExceptionHandler

@ExceptionHandler注释是一种Spring框架提供的注释,用于指示特定方法能够处理抛出异常的方法。 它允许我们定义一个返回类型,它告诉Spring应该向客户端发送什么响应。

自定义异常类

Spring集中处理异常的另一种机制是创建自定义异常。创建自定义异常是为了再需要它的时候使用。

  1. 创建一个自定义异常类

    ```java
    public class CustomException extends RuntimeException {

    private static final long serialVersionUID = 1L;
    
    private String errorMessage;
    
    public CustomException(String errorMessage) {
        this.errorMessage = errorMessage;
    }
    
    public String getErrorMessage() {
        return errorMessage;
    }
    

    }
    ```

  2. 创建异常处理程序

    ```java
    @ControllerAdvice
    public class CustomExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity customExceptionHandler(CustomException ex) {
    ErrorResponse errorResponse = new ErrorResponse();
    errorResponse.setErrorCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
    errorResponse.setMessage(ex.getErrorMessage());
    return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity exceptionHandler(Exception ex) {
    ErrorResponse errorResponse = new ErrorResponse();
    errorResponse.setErrorCode(HttpStatus.BAD_REQUEST.value());
    errorResponse.setMessage(ex.getMessage());
    return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }
    }
    ```

示例说明

  1. 使用@ControllerAdvice和@ExceptionHandler处理IllegalArgumentException

    ```java
    @RestController
    public class MyController {

    @GetMapping("/test1")
    public String test1() {
        throw new IllegalArgumentException("Some input parameter is invalid");
    }
    

    }
    ```

    ```java
    @ControllerAdvice
    public class CustomExceptionHandler {

    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<ErrorResponse> illegalArgumentExceptionHandler(Exception ex) {
        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setErrorCode(HttpStatus.BAD_REQUEST.value());
        errorResponse.setMessage(ex.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }
    
    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> exceptionHandler(Exception ex) {
        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setErrorCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
        errorResponse.setMessage(ex.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }
    

    }
    ```

  2. 使用自定义异常类处理CustomException

    ```java
    @RestController
    public class MyController {

    @GetMapping("/test2")
    public String test2() {
        throw new CustomException("Some internal error occurred");
    }
    

    }
    ```

    ```java
    public class CustomException extends RuntimeException {

    private static final long serialVersionUID = 1L;
    
    private String errorMessage;
    
    public CustomException(String errorMessage) {
        this.errorMessage = errorMessage;
    }
    
    public String getErrorMessage() {
        return errorMessage;
    }
    

    }
    ```

    ```java
    @ControllerAdvice
    public class CustomExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity<ErrorResponse> customExceptionHandler(CustomException ex) {
        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setErrorCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
        errorResponse.setMessage(ex.getErrorMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }
    
    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> exceptionHandler(Exception ex) {
        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setErrorCode(HttpStatus.BAD_REQUEST.value());
        errorResponse.setMessage(ex.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }
    

    }
    ```

使用上述技术,我们可以非常优雅地处理Spring Boot应用程序中的所有异常情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring boot集中异常处理方法实例 - Python技术站

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

相关文章

  • Spring boot整合mybatis实现过程图解

    首先我们来讲解一下Spring Boot整合Mybatis的基本过程和步骤: 1. 引入相关依赖 首先我们需要在我们的pom.xml文件中引入以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boo…

    Java 2023年5月19日
    00
  • 详解Spring mvc的web.xml配置说明

    在Spring MVC中,web.xml文件是配置Spring MVC的重要文件之一。本文将详细讲解web.xml文件的配置说明,并提供两个示例说明。 web.xml配置说明 1. DispatcherServlet 在web.xml文件中,我们需要配置DispatcherServlet来处理Web请求和响应。下面是一个示例: <servlet>…

    Java 2023年5月18日
    00
  • Java的Struts框架报错“NullChainException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullChainException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查文件以解决此问题。 链名称:如果链名称不正确,则可能出现此。在这种情况下,需要检查链名称以解决此问题。 以下是两个实例: 例 1 如果配置文件中没有正确配置,则…

    Java 2023年5月5日
    00
  • MAC 命令行启动tomcat的详细介绍

    下面是启动 Tomcat 的详细攻略。 安装 Tomcat 在使用 MAC 命令行启动 Tomcat 之前,需要先安装 Tomcat。你可以在 Tomcat 的官网 https://tomcat.apache.org/ 下载最新版本的 Tomcat。安装方法如下: 将下载的 Tomcat 压缩包解压到你希望安装的目录中,例如 /opt/tomcat/。 打开…

    Java 2023年5月19日
    00
  • Java运行时动态生成类实现过程详解

    Java运行时动态生成类实现过程详解 Java运行时动态生成类是一种十分强大的功能,它可以帮助我们在程序运行时生成Java类并进行动态修改和加载。在本文中,我们将深入讲解Java运行时动态生成类的实现过程,以帮助读者更好地掌握这一技术。 1. 类的动态生成 Java中,类的动态生成可以通过Java字节码实现。Java字节码是Java源代码编译后的代码,也就是…

    Java 2023年5月26日
    00
  • 详解Spring Data JPA使用@Query注解(Using @Query)

    当我们使用Spring Data JPA进行数据库操作时,我们可以使用@Query注解来定制自己的SQL语句。本文将详细讲解@Query注解的使用方法。 1. @Query注解概述 @Query注解可以被用来定义查询语言或者存储过程语言,以代替基于方法名的查询语句。通过使用@Query,可以使用JPQL或者本地SQL来执行查询。该注解用于在JPA Repos…

    Java 2023年5月20日
    00
  • jsp include文件时的一个乱码解决方法

    当使用JSP引入外部文件时,有可能因为字符编码不一致导致引入的文件出现乱码。下面是一种解决方案。 一、问题描述 当在一个JSP页面中引入一个外部文件时,例如在header.jsp文件中引入了footer.jsp文件: <jsp:include page="footer.jsp" /> 然后我们发现,引入的footer.jsp文…

    Java 2023年6月15日
    00
  • JS实现鼠标移上去显示图片或微信二维码

    要实现鼠标移上去显示图片或微信二维码,可以使用JavaScript中DOM元素的事件和属性,具体的步骤如下: 首先,在HTML代码中,我们需要定义一个目标元素,即需要触发鼠标移动事件的元素。可以给这个元素设置一个id属性,方便在JavaScript中获取它的引用。例如: <div id="target">鼠标移上去触发事件&l…

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