c语言编程笔录

首页 >   > 笔记大全

笔记大全

SpringBoot怎么配置全局异常处理器捕获异常

更新时间:2023-11-12

前言

在编写Spring Boot应用时,处理异常是一个重要的方面。当应用程序运行时,难免会出现错误和异常情况。为了更好地控制和处理这些异常,我们可以使用全局异常处理器来捕获和处理应用程序中的异常。Spring Boot提供了一种简单而强大的方式来配置全局异常处理器,从而实现统一的异常处理。

配置全局异常处理器

首先,我们需要创建一个异常处理器类。该类可以是一个带有@ControllerAdvice注解的类,通过该注解告诉Spring Boot这个类是一个全局异常处理器。在这个类中,我们可以定义多个方法,每个方法用来处理不同类型的异常。

@ControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(Exception.class)
    public ResponseEntity handleException(Exception ex) {
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }
    
    @ExceptionHandler(NotFoundException.class)
    public ResponseEntity handleNotFoundException(NotFoundException ex) {
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.NOT_FOUND.value(), ex.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
    }
    
    // 其他异常处理方法...
}

在上面的示例中,我们定义了两个异常处理方法:handleException方法用于处理所有类型的异常,handleNotFoundException方法用于处理NotFoundException异常。这些方法需要带有@ExceptionHandler注解,并指定需要处理的异常类型。

捕获和处理异常

一旦异常发生,全局异常处理器就会自动捕获并处理异常。在处理异常时,我们可以根据具体的异常类型来响应不同的结果。通常情况下,我们可以返回一个自定义的错误响应对象,其中包含了错误代码和错误消息。

@RestController
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        User user = userService.getUserById(id);
        if (user == null) {
            throw new NotFoundException("User not found");
        }
        return user;
    }
    
    // 其他方法...
}

在上面的示例中,当请求/users/{id}时,如果找不到对应的用户,就会抛出NotFoundException异常。全局异常处理器就会捕获这个异常,并返回一个包含错误信息的响应对象。

总结

通过配置全局异常处理器,我们可以统一处理应用程序中的异常,提供友好的错误信息给客户端。在异常处理器类中,我们可以定义多个方法来处理不同类型的异常。通过这种方式,可以让我们的代码更加清晰和易于维护。