下面我将介绍如何在Spring Boot项目中使用全局异常处理。
什么是全局异常处理
Spring Boot提供了全局异常处理机制,可以自定义异常处理,将异常统一处理。当系统中出现异常时,通过该全局异常处理机制,可以统一的返回异常信息,避免因为异常没有处理而导致系统崩溃等问题。
如何自定义全局异常处理
- 先创建一个自定义异常类,让其继承
RuntimeException
或其子类,例如:
public class NotFoundException extends RuntimeException {
private final String code;
private final String message;
public NotFoundException(String code, String message) {
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
}
- 创建全局异常处理器类,可以使用
@ControllerAdvice
注解标注,具体代码如下:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ErrorResponse handleException(Exception ex) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setCode("500");
errorResponse.setMessage(ex.getMessage());
return errorResponse;
}
}
在该类中,我们使用了@ControllerAdvice注解标注该类,告诉Spring Boot该类为全局异常处理器,使用@ExceptionHandler注解对异常进行处理,@ResponseBody注解用于返回JSON格式的数据。
- 创建一个DTO类,用于封装错误信息:
public class ErrorResponse {
private String code;
private String message;
//getter/setter
}
- 通过上述步骤,我们已经可以实现全局异常处理器的功能。在业务代码中,当出现需要处理的异常时,抛出自定义异常即可:
@GetMapping("/user/{id}")
public User getUserById(@PathVariable String id) {
Optional<User> user = userRepository.findById(id);
if (user.isPresent()) {
return user.get();
}
throw new NotFoundException("404","用户不存在");
}
在上述代码中,当id对应的用户不存在时,我们抛出了自定义的NotFoundException异常。
至此,我们已经实现了全局异常处理器在项目中的应用。当出现任何未处理的异常时,都会被该处理器接管,并返回JSON格式的错误信息。
下面再给出一个示例:
@PostMapping("/user")
public User addUser(@RequestBody User user) {
if (StringUtils.isEmpty(user.getName())) {
throw new BadRequestException("400","用户姓名不能为空");
}
if (StringUtils.isEmpty(user.getPhone())) {
throw new BadRequestException("400","用户手机号不能为空");
}
return userRepository.save(user);
}
在该示例中,当用户的姓名或手机号为空时,我们也抛出了自定义的BadRequestException异常,该异常同样会在全局异常处理器中进行处理。
总结
全局异常处理是Spring Boot中非常重要的机制,它可以使我们的代码更加健壮,避免因为未处理异常而导致系统崩溃等问题。全局异常处理器的实现非常简单,只需要使用@ControllerAdvice注解标注一个类即可。在正式使用时,我们只需要在业务代码中抛出自定义异常,全局异常处理器会统一处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解如何在SpringBoot项目中使用全局异常处理 - Python技术站