You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
6.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 : "请求参数错误");
}
}