import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
/**
* 全局统一响应结果封装类
* 用于统一接口返回格式,便于前端统一处理响应数据、错误信息
* 响应格式遵循 RESTful 设计规范,包含状态码、描述信息、业务数据三部分
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result { // 泛型化改造,提升类型安全性,避免强制类型转换
/**
* 响应状态码(参考 HTTP 状态码语义,扩展业务状态码)
* 2xx: 成功(如 200-操作成功)
* 4xx: 客户端错误(如 400-参数错误、401-未授权、403-权限不足、404-资源不存在)
* 5xx: 服务端错误(如 500-系统异常、503-服务不可用)
*/
private Integer code;
/**
* 响应描述信息
* 成功时返回友好提示,失败时返回具体错误原因(前端可直接展示)
*/
private String msg;
/**
* 响应业务数据
* 成功时返回查询结果、操作结果等业务数据,失败时可返回 null 或错误详情
*/
private T data;
// ==================== 成功响应快捷方法 ====================
/**
* 无数据返回的成功响应(适用于增、删、改操作)
* 默认状态码 200,描述信息 "操作成功"
* @return 统一成功响应对象
*/
public static Result success() {
return new Result<>(200, "操作成功", null);
}
/**
* 带数据返回的成功响应(适用于查询操作)
* 默认状态码 200,描述信息 "查询成功"
* @param data 业务数据(如列表、详情、统计结果等)
* @return 带数据的成功响应对象
*/
public static Result success(T data) {
return new Result<>(200, "查询成功", data);
}
/**
* 自定义描述信息的成功响应(适用于特殊场景,如 "创建成功"、"更新成功")
* 默认状态码 200,支持自定义描述信息
* @param msg 自定义成功描述
* @param data 业务数据(可为 null)
* @return 自定义描述的成功响应对象
*/
public static Result success(String msg, T data) {
return new Result<>(200, msg, data);
}
// ==================== 客户端错误响应快捷方法 ====================
/**
* 客户端参数错误响应(适用于参数校验失败)
* 状态码 400,支持自定义错误描述
* @param msg 参数错误详情(如 "用户名不能为空")
* @return 参数错误响应对象
*/
public static Result badRequest(String msg) {
return new Result<>(400, msg, null);
}
/**
* 未授权响应(适用于未登录、token 失效)
* 状态码 401,默认描述 "未授权,请先登录"
* @return 未授权响应对象
*/
public static Result unauthorized() {
return new Result<>(401, "未授权,请先登录", null);
}
/**
* 权限不足响应(适用于已登录但无操作权限)
* 状态码 403,默认描述 "权限不足,无法操作"
* @return 权限不足响应对象
*/
public static Result forbidden() {
return new Result<>(403, "权限不足,无法操作", null);
}
/**
* 资源不存在响应(适用于查询的资源不存在)
* 状态码 404,默认描述 "请求的资源不存在"
* @return 资源不存在响应对象
*/
public static Result notFound() {
return new Result<>(404, "请求的资源不存在", null);
}
// ==================== 服务端错误响应快捷方法 ====================
/**
* 服务端通用错误响应(适用于系统异常、未知错误)
* 状态码 500,默认描述 "系统繁忙,请稍后再试"
* @return 服务端错误响应对象
*/
public static Result error() {
return new Result<>(500, "系统繁忙,请稍后再试", null);
}
/**
* 自定义描述的服务端错误响应(适用于已知的服务端异常)
* 状态码 500,支持自定义错误描述
* @param msg 错误详情(如 "数据库连接失败")
* @return 自定义描述的服务端错误响应对象
*/
public static Result error(String msg) {
return new Result<>(500, msg, null);
}
/**
* 自定义状态码和描述的错误响应(适用于特殊业务错误)
* 支持自定义状态码和描述信息,灵活应对业务场景
* @param code 自定义状态码
* @param msg 错误描述
* @return 自定义错误响应对象
*/
public static Result error(Integer code, String msg) {
return new Result<>(code, msg, null);
}
}
使用示例
// 1. 增删改成功(无数据返回)
return Result.success();
// 2. 查询成功(带数据返回)
List userList = userService.list();
return Result.success(userList);
// 3. 自定义成功描述(如创建成功)
User user = userService.save(userDTO);
return Result.success("用户创建成功", user);
// 4. 参数错误(客户端错误)
if (StringUtils.isEmpty(userDTO.getName())) {
return Result.badRequest("用户名不能为空");
}
// 5. 未登录(客户端错误)
return Result.unauthorized();
// 6. 资源不存在(客户端错误)
User user = userService.getById(id);
if (user == null) {
return Result.notFound();
}
// 7. 系统异常(服务端错误)
try {
// 业务逻辑
} catch (Exception e) {
log.error("系统异常", e);
return Result.error();
}
// 8. 自定义业务错误(如库存不足)
if (goods.getStock() < 1) {
return Result.error(600, "库存不足,无法下单");
}