前言
统一封装后端返回值可以提高接口的一致性、安全性、可维护性和用户体验;统一返回结果中一般主要包含3个参数分别是code,msg,data
{
"code": 200,
"message": "操作成功",
"data": {
"age": 18,
"msg": "张三"
}
}
一、统一返回值
1.1.定义统一返回接口
package com.light.common.result;
/**
* 统一返回码接口
*/
public interface IResultCode {
/**
* 返回码
*/
long getCode();
/**
* 返回信息
*/
String getMessage();
}
1.2.实现统一返回码
定义一个统一的返回码枚举类,目的是统一状态码和状态信息;
此处为了扩展性,多了一个IResultCode其目的是后续其他地方需要用的封装状态码的时候,只需要实现就行,不需要再重复定义,后续统一异常封装的时候
package com.light.common.result;
/**
* 封装统一返回码
*/
public enum ResultCode implements IResultCode {
SUCCESS(200, "操作成功"),
FAILED(500, "操作异常"),
VALIDATE_FAILED(400, "参数检验失败"),
UNAUTHORIZED(401, "暂未登录或token已经过期"),
FORBIDDEN(403, "没有相关权限");
private ResultCode(long code, String message) {
this.code = code;
this.message = message;
}
private long code;
private String message;
@Override
public long getCode() {
return code;
}
@Override
public String getMessage() {
return message;
}
}
1.3.封装通用返回结果类
package com.light.common.result;
import java.io.Serial;
import java.io.Serializable;
/**
- 封装通用返回结果类
*/
public class BaseResult<T> implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 状态码
*/
private long code;
/**
* 提示信息
*/
private String message;
/**
* 数据封装
*/
private T data;
private BaseResult() {
}
private BaseResult(long code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
/**
* 成功返回结果
*/
public static <T> BaseResult<T> success() {
return new BaseResult<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), null);
}
/**
* 成功返回的结果
*
* @param message 成功提示消息
*/
public static <T> BaseResult<T> success(String message) {
return new BaseResult<T>(ResultCode.SUCCESS.getCode(), message, null);
}
/**
* 成功返回结果
*
* @param data 获取的数据
*/
public static <T> BaseResult<T> success(T data) {
return new BaseResult<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
}
/**
* 失败返回结果
*/
public static <T> BaseResult<T> failed() {
return failed(ResultCode.FAILED);
}
/**
* 失败返回结果
*
* @param message 提示信息
*/
public static <T> BaseResult<T> failed(String message) {
return new BaseResult<T>(ResultCode.FAILED.getCode(), message, null);
}
/**
* 失败返回结果
*
* @param errorCode 错误码
* @param message 错误信息
*/
public static <T> BaseResult<T> failed(IResultCode errorCode, String message) {
return new BaseResult<T>(errorCode.getCode(), message, null);
}
/**
* 失败返回结果
*
* @param errorCode 错误码
*/
public static <T> BaseResult<T> failed(IResultCode errorCode) {
return new BaseResult<T>(errorCode.getCode(), errorCode.getMessage(), null);
}
public long getCode() {
return code;
}
public void setCode(long code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return "BaseResult{" +
"code=" + code +
", message='" + message + '\'' +
", data=" + data +
'}';
}
}
说明:
实现Serializable为了类的对象需要序列化时,应该实现 Serializable 接口;其作用是
- 允许对象在网络上传输或写入到文件中
- 允许对象被存储到文件系统或数据库中
二、使用步骤
2.1创建测试Controller
在light-api模块的controller包中,创建一个测试TestController,利用我们封装的统一返回类进行测试
package com.light.api.controller;
import com.light.common.result.BaseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/getMsg")
public BaseResult<?> getTest() {
Map<String, String> map = new HashMap<>();
map.put("name","张三");
map.put("age","18");
return BaseResult.success(map);
}
}
2.2 请求测试
使用PostMain进行测试

总结
以上就是封装统一返回值的内容,这里仅仅只是对正常的返回值进行了封装,下一章节续写统一异常处理的方法

7250

被折叠的 条评论
为什么被折叠?



