c语言编程笔录

首页 >   > 笔记大全

笔记大全

Springboot项目中怎么实现异常处理自定义

更新时间:2023-07-14

背景介绍

Springboot是一个基于Spring框架,使用SpringMVC进行web开发和管理的java开发框架,为我们提供了很多便捷的操作和功能。在应用程序中,异常是一件经常发生的事情。当然,我们可以使用标准的try-catch语句来处理异常,但是这种方法可能很繁琐,我们需要在每个接口和方法中编写该代码,而且还不能很好地优化和维护我们的应用程序。因此,Springboot提供了一种一致的方法来处理异常,可以减少重复的代码并实现完整的异常控制。

自定义异常

Springboot允许我们创建自定义异常类,这为我们许多代码的重复性工作带来了便利。通过抛出自己的异常,我们可以确保更准确地描述问题,并提供更有用的错误信息。以下是一个自定义异常的示例代码:

public class MyException extends RuntimeException {
      private String message;
      private int code;

      public MyException(String message, int code) {
          this.message = message;
          this.code = code;
      }

      @Override
      public String getMessage() {
          return message;
      }

      public int getCode() {
          return code;
      }
  }

全局异常处理器

一旦我们定义了自己的异常,我们需要为我们的Springboot应用程序创建一个全局异常处理器,以便我们能够处理各种问题。在Springboot应用程序中,我们可以使用@ControllerAdvice注释来处理异常。以下是一个处理所有未捕获的异常(500)的全局异常处理器:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity handleException(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ex.getMessage());
    }
}

控制器调用

最后,我们需要将异常传递给控制器。在控制器中,我们可以使用try-catch块,以便在出现异常时采取适当的措施。例如,以下代码块尝试将一个字符串转换为整数,如果字符串不是有效的整数,则抛出一个新的自定义异常:

@RestController
public class MyController {

    @RequestMapping(value = "/myEndpoint", method = RequestMethod.POST)
    public ResponseEntity myEndpoint(@RequestBody String requestBody) {
        try {
            int intValue = Integer.parseInt(requestBody);
            return ResponseEntity.ok(new MyResponse("Success!"));
        } catch (NumberFormatException nfex) {
            throw new MyException("Invalid input provided", 400);
        }
    }
}