update 新增R.data方法替代返回R<String>时泛型问题

This commit is contained in:
疯狂的狮子Li
2026-06-02 15:38:33 +08:00
parent 629e6a4551
commit 7f066f3f43
9 changed files with 133 additions and 44 deletions
@@ -7,9 +7,13 @@ import org.dromara.common.core.constant.HttpStatus;
import java.io.Serial;
import java.io.Serializable;
import static org.dromara.common.core.constant.HttpStatus.ERROR;
import static org.dromara.common.core.constant.HttpStatus.SUCCESS;
/**
* 响应信息主体
*
* @param <T> 响应数据的泛型类型
* @author Lion Li
*/
@Data
@@ -20,87 +24,163 @@ public class R<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 兼容旧代码的成功常量
*/
public static final int SUCCESS = HttpStatus.SUCCESS;
/**
* 兼容旧代码的失败常量
*/
public static final int FAIL = HttpStatus.ERROR;
/**
* 消息状态码
* 响应状态码
*/
private int code;
/**
* 消息内容
* 响应提示信息
*/
private String msg;
/**
* 数据对象
* 响应业务数据
*/
private T data;
/**
* 构建成功响应结果
*
* @param <T> 响应数据的泛型类型
* @return 成功响应结果对象
*/
public static <T> R<T> ok() {
return restResult(null, HttpStatus.SUCCESS, "操作成功");
return restResult(null, SUCCESS, "操作成功");
}
/**
* 构建成功响应结果(带业务数据)
*
* @param data 业务数据
* @param <T> 响应数据的泛型类型
* @return 成功响应结果对象
*/
public static <T> R<T> ok(T data) {
return restResult(data, HttpStatus.SUCCESS, "操作成功");
return restResult(data, SUCCESS, "操作成功");
}
/**
* 构建成功响应结果(明确指定业务数据)
*
* @param data 业务数据
* @param <T> 响应数据的泛型类型
* @return 成功响应结果对象
*/
public static <T> R<T> data(T data) {
return restResult(data, SUCCESS, "操作成功");
}
/**
* 构建成功响应结果(自定义提示信息)
*
* @param msg 自定义提示信息
* @param <T> 响应数据的泛型类型
* @return 成功响应结果对象
*/
public static <T> R<T> ok(String msg) {
return restResult(null, HttpStatus.SUCCESS, msg);
return restResult(null, SUCCESS, msg);
}
/**
* 构建成功响应结果(自定义提示信息+业务数据)
*
* @param msg 自定义提示信息
* @param data 业务数据
* @param <T> 响应数据的泛型类型
* @return 成功响应结果对象
*/
public static <T> R<T> ok(String msg, T data) {
return restResult(data, HttpStatus.SUCCESS, msg);
return restResult(data, SUCCESS, msg);
}
/**
* 构建失败响应结果
*
* @param <T> 响应数据的泛型类型
* @return 失败响应结果对象
*/
public static <T> R<T> fail() {
return restResult(null, HttpStatus.ERROR, "操作失败");
return restResult(null, ERROR, "操作失败");
}
/**
* 构建失败响应结果(自定义提示信息)
*
* @param msg 自定义提示信息
* @param <T> 响应数据的泛型类型
* @return 失败响应结果对象
*/
public static <T> R<T> fail(String msg) {
return restResult(null, HttpStatus.ERROR, msg);
return restResult(null, ERROR, msg);
}
/**
* 构建失败响应结果(带业务数据)
*
* @param data 业务数据
* @param <T> 响应数据的泛型类型
* @return 失败响应结果对象
*/
public static <T> R<T> fail(T data) {
return restResult(data, HttpStatus.ERROR, "操作失败");
return restResult(data, ERROR, "操作失败");
}
/**
* 构建失败响应结果(自定义提示信息+业务数据)
*
* @param msg 自定义提示信息
* @param data 业务数据
* @param <T> 响应数据的泛型类型
* @return 失败响应结果对象
*/
public static <T> R<T> fail(String msg, T data) {
return restResult(data, HttpStatus.ERROR, msg);
return restResult(data, ERROR, msg);
}
/**
* 构建失败响应结果(自定义状态码+提示信息)
*
* @param code 自定义状态码
* @param msg 自定义提示信息
* @param <T> 响应数据的泛型类型
* @return 失败响应结果对象
*/
public static <T> R<T> fail(int code, String msg) {
return restResult(null, code, msg);
}
/**
* 返回警告消息
* 构建警告响应结果
*
* @param msg 返回内容
* @return 警告消息
* @param msg 自定义提示信息
* @param <T> 响应数据的泛型类型
* @return 警告响应结果对象
*/
public static <T> R<T> warn(String msg) {
return restResult(null, HttpStatus.WARN, msg);
}
/**
* 返回警告消息
* 构建警告响应结果(自定义提示信息+业务数据)
*
* @param msg 返回内容
* @param data 数据对象
* @return 警告消息
* @param msg 自定义提示信息
* @param data 业务数据
* @param <T> 响应数据的泛型类型
* @return 警告响应结果对象
*/
public static <T> R<T> warn(String msg, T data) {
return restResult(data, HttpStatus.WARN, msg);
}
/**
* 核心构建方法
*
* @param data 业务数据
* @param code 响应状态码
* @param msg 提示信息
* @param <T> 响应数据的泛型类型
* @return 响应结果对象
*/
private static <T> R<T> restResult(T data, int code, String msg) {
R<T> r = new R<>();
r.setCode(code);
@@ -109,12 +189,26 @@ public class R<T> implements Serializable {
return r;
}
/**
* 判断响应结果是否为失败
*
* @param ret 响应结果对象
* @param <T> 响应数据的泛型类型
* @return true=失败,false=成功
*/
public static <T> Boolean isError(R<T> ret) {
return !isSuccess(ret);
}
/**
* 判断响应结果是否为成功
*
* @param ret 响应结果对象
* @param <T> 响应数据的泛型类型
* @return true=成功,false=失败
*/
public static <T> Boolean isSuccess(R<T> ret) {
return ret != null && HttpStatus.SUCCESS == ret.getCode();
return ret != null && SUCCESS == ret.getCode();
}
}