|
|
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<String, Object> {
|
|
|
|
|
|
// 序列化版本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<String, Object> 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 : "请求参数错误");
|
|
|
}
|
|
|
} |