
Spring
在开发过程中,我们常常会遇到各种异常情况,如网络请求失败、参数校验错误、数据库操作异常等。为了能够更好地处理这些异常情况并向用户提供友好的提示信息,我们可以使用 Spring 框架提供的 @ControllerAdvice 和 @ResponseStatus 注解进行统一的异常处理。
使用 @ControllerAdvice 统一处理异常@ControllerAdvice 是一个用来处理全局异常的注解,通过在类上添加该注解,我们可以定义全局的异常处理逻辑。在这个类中,我们可以定义多个方法,每个方法用来处理不同类型的异常。首先,我们创建一个全局异常处理类 GlobalExceptionHandler,并在类上添加 @ControllerAdvice 注解:Java@ControllerAdvicepublic class GlobalExceptionHandler {}接下来,我们可以在 GlobalExceptionHandler 中添加一些异常处理方法。我们可以使用 @ExceptionHandler 注解来指定需要处理的异常类型。例如,我们可以添加一个方法来处理 IllegalArgumentException 异常:Java@ExceptionHandler(IllegalArgumentException.class)public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) { return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);}在上述代码中,我们使用 @ExceptionHandler(IllegalArgumentException.class) 注解来指定需要处理的异常类型为 IllegalArgumentException。当出现该异常时,框架会自动调用 handleIllegalArgumentException 方法,并将异常对象作为参数传入。在方法中,我们可以根据异常对象来进行一些自定义的处理逻辑,然后返回一个 ResponseEntity 对象,用于返回给客户端。使用 @ResponseStatus 定义异常的 HTTP 状态码在处理异常时,除了返回异常信息外,我们还可以通过 @ResponseStatus 注解来指定异常对应的 HTTP 状态码。这样,当发生异常时,框架会自动返回指定的状态码给客户端。我们可以在异常处理方法上添加 @ResponseStatus 注解,并指定对应的状态码。例如,我们可以将上面的 handleIllegalArgumentException 方法修改如下:Java@ExceptionHandler(IllegalArgumentException.class)@ResponseStatus(HttpStatus.BAD_REQUEST)public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) { return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);}在上述代码中,我们添加了 @ResponseStatus(HttpStatus.BAD_REQUEST) 注解,指定了当发生 IllegalArgumentException 异常时,返回的状态码为 400 Bad Request。案例代码下面是一个完整的示例,演示了如何使用 @ControllerAdvice 和 @ResponseStatus 进行异常处理:Java@ControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(IllegalArgumentException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) { return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST); } @ExceptionHandler(NullPointerException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResponseEntity<String> handleNullPointerException(NullPointerException ex) { return new ResponseEntity<>("发生空指针异常", HttpStatus.INTERNAL_SERVER_ERROR); }}在上述代码中,我们定义了两个异常处理方法。handleIllegalArgumentException 方法用于处理 IllegalArgumentException 异常,返回的状态码为 400 Bad Request;handleNullPointerException 方法用于处理 NullPointerException 异常,返回的状态码为 500 Internal Server Error。使用 @ControllerAdvice 和 @ResponseStatus 可以方便地统一处理异常,并向用户提供友好的提示信息。通过指定异常类型和返回的状态码,我们可以根据具体的业务需求进行自定义的异常处理。这样,我们就能够更好地应对各种异常情况,提升用户体验和系统的稳定性。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号