package com.utils; import java.util.HashMap; import java.util.Map; /** * 统一响应结果工具类 * * 核心职责:提供标准化的API响应数据格式 * * 设计理念: * 1. 继承HashMap,提供灵活的键值对存储 * 2. 链式调用支持,便于构建复杂响应 * 3. 预定义常用成功/失败方法,减少重复代码 * 4. 统一的响应码和消息格式 * * 标准响应格式: * { * "code": 0, // 响应状态码 * "msg": "success", // 响应消息 * "data": {...} // 响应数据 * ... // 其他扩展字段 * } */ public class R extends HashMap { // 序列化版本ID private static final long serialVersionUID = 1L; // 成功状态码 public static final int SUCCESS_CODE = 0; // 默认错误状态码 public static final int ERROR_CODE = 500; /** * 默认构造函数 * 初始化默认的成功响应 */ public R() { put("code", SUCCESS_CODE); // 默认成功状态码 put("msg", "success"); // 默认成功消息 } /** * 创建默认错误响应 * 使用500状态码和默认错误消息 * * @return 错误响应对象 */ public static R error() { return error(ERROR_CODE, "未知异常,请联系管理员"); } /** * 创建指定消息的错误响应 * 使用500状态码和自定义错误消息 * * @param msg 错误消息 * @return 错误响应对象 */ public static R error(String msg) { return error(ERROR_CODE, msg); } /** * 创建指定状态码和消息的错误响应 * * @param code 错误状态码 * @param msg 错误消息 * @return 错误响应对象 */ public static R error(int code, String msg) { R r = new R(); r.put("code", code); // 设置错误状态码 r.put("msg", msg); // 设置错误消息 return r; } /** * 创建指定消息的成功响应 * * @param msg 成功消息 * @return 成功响应对象 */ public static R ok(String msg) { R r = new R(); r.put("msg", msg); // 设置自定义成功消息 return r; } /** * 基于现有Map创建成功响应 * 保留原始Map中的所有键值对 * * @param map 原始数据Map * @return 成功响应对象 */ public static R ok(Map map) { R r = new R(); r.putAll(map); // 合并原始Map数据 return r; } /** * 创建默认成功响应 * 使用默认的成功状态码和消息 * * @return 成功响应对象 */ public static R ok() { return new R(); } /** * 添加键值对(支持链式调用) * * @param key 键 * @param value 值 * @return 当前响应对象 */ @Override public R put(String key, Object value) { super.put(key, value); return this; // 返回当前对象,支持链式调用 } // 可以添加的增强方法: /** * 设置响应数据 * * @param data 响应数据 * @return 当前响应对象 */ public R data(Object data) { return put("data", data); } /** * 设置响应消息 * * @param msg 响应消息 * @return 当前响应对象 */ public R message(String msg) { return put("msg", msg); } /** * 设置响应状态码 * * @param code 状态码 * @return 当前响应对象 */ public R code(int code) { return put("code", code); } /** * 判断响应是否成功 * * @return 是否成功(code == 0) */ public boolean isSuccess() { Object code = get("code"); return code != null && code.equals(SUCCESS_CODE); } /** * 获取响应数据 * * @return 响应数据 */ public Object getData() { return get("data"); } /** * 获取响应消息 * * @return 响应消息 */ public String getMessage() { Object msg = get("msg"); return msg != null ? msg.toString() : null; } /** * 获取响应状态码 * * @return 状态码 */ public Integer getCode() { Object code = get("code"); return code != null ? (Integer) code : null; } /** * 创建分页数据响应 * * @param page 分页数据 * @return 成功响应对象 */ public static R page(Object page) { return ok().put("page", page); } /** * 创建列表数据响应 * * @param list 列表数据 * @return 成功响应对象 */ public static R list(Object list) { return ok().put("list", list); } /** * 创建令牌响应 * * @param token 令牌 * @return 成功响应对象 */ public static R token(String token) { return ok().put("token", token); } /** * 创建未授权错误响应 * * @param msg 错误消息 * @return 错误响应对象 */ public static R unauthorized(String msg) { return error(401, msg != null ? msg : "未授权访问"); } /** * 创建禁止访问错误响应 * * @param msg 错误消息 * @return 错误响应对象 */ public static R forbidden(String msg) { return error(403, msg != null ? msg : "禁止访问"); } /** * 创建资源不存在错误响应 * * @param msg 错误消息 * @return 错误响应对象 */ public static R notFound(String msg) { return error(404, msg != null ? msg : "资源不存在"); } /** * 创建参数错误响应 * * @param msg 错误消息 * @return 错误响应对象 */ public static R badRequest(String msg) { return error(400, msg != null ? msg : "请求参数错误"); } }