赞
踩
Spring Boot 中处理异常的优雅方式通常涉及到全局异常处理、@ControllerAdvice、@RestControllerAdvice 和 ResponseEntity 等机制。以下是如何在 Spring Boot 中优雅地处理异常:
创建全局异常处理类:
使用 @ControllerAdvice
或 @RestControllerAdvice
注解创建一个全局异常处理类,它可以捕获控制器抛出的所有异常。@RestControllerAdvice
是 @ControllerAdvice
和 @ResponseBody
的组合,适用于 RESTful API 场景。
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class) public ResponseEntity<Object> handleException(Exception ex) { // 根据异常类型定制响应内容 if (ex instanceof YourCustomException) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ErrorResponse("custom error message")); } else if (ex instanceof MethodArgumentNotValidException) { BindingResult bindingResult = ((MethodArgumentNotValidException) ex).getBindingResult(); // 处理校验错误 } // 通用异常处理 log.error("Global exception handler caught an exception: ", ex); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse("Internal server error")); } } public class ErrorResponse { private String errorMessage; // 构造函数、getter 和 setter 等 }
自定义异常类:
为了更好的区分和处理不同类型的异常,可以创建自定义异常类,并在控制器方法中抛出。
public class YourCustomException extends RuntimeException {
public YourCustomException(String message) {
super(message);
}
}
针对特定异常处理:
在 GlobalExceptionHandler
中使用 @ExceptionHandler
方法针对特定类型的异常进行处理,返回定制的错误信息。
HTTP 状态码:
通过 ResponseEntity
返回异常时,可以根据异常的性质设置合适的 HTTP 状态码,如 HttpStatus.BAD_REQUEST
(400)、HttpStatus.NOT_FOUND
(404)、HttpStatus.INTERNAL_SERVER_ERROR
(500)等。
国际化异常信息:
若需要支持多语言的异常消息,可以引入国际化支持,从资源文件中读取异常信息,以适应不同语言环境的用户。
通过上述方法,可以构建一套完整且优雅的全局异常处理机制,使程序在遇到异常时能够提供统一且友好的错误响应格式,同时便于后期维护和扩展。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。