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 ResponseEntityhandleException(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 ResponseEntitymyEndpoint(@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); } } }