package com.example.emos.wx.api.common.util;
import org.apache.http.HttpStatus; // Apache 的 HTTP 状态码工具类
import java.util.HashMap;
/**
* 通用响应工具类,用于统一封装接口返回值。
* 继承自 HashMap,方便存储键值对数据。
*/
public class R extends HashMap<String, Object> {
/**
* 默认构造方法:
* 初始化时,默认返回成功的状态码和消息。
* 状态码:HttpStatus.SC_OK(200)
* 消息:"success"
*/
public R() {
put("code", HttpStatus.SC_OK); // 设置默认状态码
put("msg", "success"); // 设置默认消息
}
/**
* 静态方法:构造一个默认成功的响应
* 返回:包含默认状态码 200 和消息 "success" 的 R 对象
*/
public static R ok() {
return new R();
}
/**
* 静态方法:构造一个成功响应,并设置自定义的消息
* 参数:msg - 自定义成功消息
* 返回:包含默认状态码 200 和自定义消息的 R 对象
*/
public static R ok(Object msg) {
R r = new R();
r.put("msg", msg); // 更新默认的消息
return r;
}
/**
* 静态方法:构造一个成功响应,并添加额外的键值对数据
* 参数:map - 包含额外数据的 HashMap
* 返回:包含默认状态码 200、默认消息以及额外数据的 R 对象
*/
public static R ok(HashMap<String, Object> map) {
R r = new R();
r.putAll(map); // 将 map 中的所有数据添加到 R 对象中
return r;
}
/**
* 静态方法:构造一个错误响应,指定状态码和错误消息
* 参数:
* - code: 错误状态码
* - msg: 错误消息
* 返回:包含指定状态码和消息的 R 对象
*/
public static R error(Integer code, String msg) {
R r = new R();
r.put("code", code); // 设置错误状态码
r.put("msg", msg); // 设置错误消息
return r;
}
/**
* 静态方法:构造一个错误响应,使用默认状态码 500 和自定义错误消息
* 参数:msg - 自定义错误消息
* 返回:包含默认状态码 500 和自定义消息的 R 对象
*/
public static R error(String msg) {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg); // 调用其他方法设置默认状态码
}
/**
* 静态方法:构造一个默认的错误响应
* 默认状态码:500
* 默认消息:"未知错误,请联系管理员处理"
* 返回:包含默认状态码和消息的 R 对象
*/
public static R error() {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知错误,请联系管理员处理");
}
/**
* 重写 HashMap 的 put 方法,返回当前 R 对象。
* 支持链式调用:r.put("key1", "value1").put("key2", "value2");
* 参数:
* - key: 键
* - value: 值
* 返回:当前 R 对象
*/
@Override
public R put(String key, Object value) {
super.put(key, value); // 调用父类的 put 方法
return this; // 返回当前对象支持链式调用
}
}
通过R工具类的调用,我们可以封装任何web返回对象。
例如:
-
默认成功响应:
{"code":200,"msg":"success"}
-
自定义消息的成功响应:
{"code":200,"msg":"操作成功"}
-
带额外数据的成功响应:
{"code":200,"msg":"success","key1":"value1","key2":"value2","extra":"附加信息"}
-
自定义错误响应:
{"code":404,"msg":"资源未找到"}
-
默认错误响应:
{"code":500,"msg":"未知错误,请联系管理员处理"}