Spring Boot 优雅实现统一数据返回格式+统一异常处理+统一日志处理
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest;
@ControllerAdvice
public class GlobalExceptionHandler {
// 日志处理省略...
// 定义返回的统一数据结构
class ResponseResult {
private int status;
private String message;
private T data;
public ResponseResult(int status, String message, T data) {
this.status = status;
this.message = message;
this.data = data;
}
// getter和setter省略...
}
// 处理所有Exception
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<ResponseResult> handleException(Exception e, WebRequest request) {
// 日志记录省略...
// 返回友好提示给前端
return new ResponseEntity<>(new ResponseResult(HttpStatus.INTERNAL_SERVER_ERROR.value(), "服务器异常", null), HttpStatus.INTERNAL_SERVER_ERROR);
}
// 处理特定的自定义异常
@ExceptionHandler(CustomException.class)
@ResponseBody
public ResponseEntity<ResponseResult> handleCustomException(CustomException e, WebRequest request) {
// 日志记录省略...
// 返回友好提示给前端
return new ResponseEntity<>(new ResponseResult(e.getStatus(), e.getMessage(), null), HttpStatus.valueOf(e.getStatus()));
}
}
// 自定义异常类
class CustomException extends Exception {
private int status;
public CustomException(int status, String message) {
super(message);
this.status = status;
}
public int getStatus() {
return status;
}
}
这个简化版的代码示例展示了如何在Spring Boot中创建一个全局异常处理器,用于处理所有类型的异常并返回一个统一的数据格式。这样的处理方式使得前端能够接收到更加友好和一致的响应,同时也方便了后端进行日志记录和问题追踪。
评论已关闭