Java 统一响应格式
实现原理
继承HashMap实现返回格式的构建,其优点是方便扩展,例如,登录成功返回token、如果是list类型的返回值还可以添加总数
实例操作
登录返回token
@PostMapping("/login")
public ResMap login(@RequestBody User user){
// 登录逻辑操作
......
// 登录成功之后
ResMap.ok("登录成功").put("token",token);
}
源代码
package com.lazy.util;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
/**
* Created by IntelliJ IDEA.
*
* @author : Joe_Lazy
* @date: 2024/4/21 1:25:16
* @Description: 定制统一数据响应格式
*/
public class ResMap extends HashMap<String, Object> {
/**
* 响应状态码
*/
private static final String TAG_CODE = "code";
/**
* 响应信息
*/
private static final String TAG_MSG = "msg";
/**
* 响应数据
*/
private static final String TAG_DATA = "data";
/**
* 列表数据
*/
private static final String TAG_ROWS = "rows";
/**
* 返回成功消息
* @return 成功消息
*/
public static ResMap ok() {
return ResMap.ok("操作成功");
}
/**
* 返回自定义成功消息
* @return 成功消息
*/
public static ResMap ok(String msg) {
return ResMap.ok(msg, null);
}
/**
* 返回成功数据
* @param data 数据
* @return 成功消息
*/
public static ResMap ok(Object data) {
return ResMap.ok("操作成功", data);
}
/**
* 返回成功列表
* @param list 列表
* @return 成功消息
*/
public static ResMap ok(List<?> list) {
return ResMap.ok("操作成功", list);
}
/**
* 返回自定义成功消息+数据
* @param msg 消息
* @param data 数据
* @return 成功消息
*/
public static ResMap ok(String msg, Object data) {
return new ResMap(200, msg, data);
}
/**
* 返回失败消息
* @return 失败消息
*/
public static ResMap error() {
return ResMap.error("操作失败");
}
/**
* 返回自定义失败消息
* @param msg 自定义消息
* @return 失败消息
*/
public static ResMap error(String msg) {
return ResMap.error(msg, null);
}
/**
* 返回自定义失败消息+失败数据
* @param msg 自定义消息
* @param data 失败数据
* @return 失败消息
*/
public static ResMap error(String msg, Object data) {
return new ResMap(500, msg, data);
}
/**
* 返回自定义失败响应码+消息
* @param code 自定义失败响应码
* @param msg 自定义消息
* @return 失败消息
*/
public static ResMap error(int code, String msg) {
return new ResMap(code, msg);
}
public ResMap(int code, String msg) {
super.put(TAG_CODE, code);
super.put(TAG_MSG, msg);
}
public ResMap(int code, String msg, Object data) {
super.put(TAG_CODE, code);
super.put(TAG_MSG, msg);
if (Objects.nonNull(data)) {
if (data instanceof Collection) {
super.put(TAG_ROWS, data);
} else {
super.put(TAG_DATA, data);
}
}
}
/**
* Map的put方法,返回本身 方便链式调用
* @param key key with which the specified value is to be associated
* @param value value to be associated with the specified key
* @return
*/
public ResMap put(String key, Object value) {
super.put(key, value);
return this;
}
}