左神-算法与数据结构全阶班

download:左神-算法与数据结构全阶班
为什么要对SpringBoot返回统一的规范格式
在默许状况下,SpringBoot的返回格式常见的有三种:
第一种:返回 String
@GetMapping("/hello")
public String getStr(){
return "hello,javadaily";
}
复制代码
此时调用接口获取到的返回值是这样:
hello,javadaily
复制代码
第二种:返回自定义对象
@GetMapping("/aniaml")
public Aniaml getAniaml(){
Aniaml aniaml = new Aniaml(1,"pig");
return aniaml;
}
复制代码
此时调用接口获取到的返回值是这样:
{
"id": 1,
"name": "pig"
}
复制代码
第三种:接口异常
@GetMapping("/error")
public int error(){

int i = 9/0; return i;

}
复制代码
此时调用接口获取到的返回值是这样:
{
"timestamp": "2021-07-08T08:05:15.423+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/wrong"
}
复制代码
基于以上种种状况,假如你和前端开发人员联调接口她们就会很懵逼,由于我们没有给他一个统一的格式,前端人员不晓得如何处置返回值。
还有甚者,有的同窗比方小张喜欢对结果停止封装,他运用了Result对象,小王也喜欢对结果停止包装,但是他却运用的是Response对象,当呈现这种状况时我置信前端人员一定会抓狂的。
所以我们项目中是需求定义一个统一的规范返回格式的。
定义返回规范格式
一个规范的返回格式至少包含3局部:
status 状态值:由后端统一定义各种返回结果的状态码
message 描绘:本次接口调用的结果描绘
data 数据:本次返回的数据。
{
"status":"100",
"message":"操作胜利",
"data":"hello,javadaily"
}
复制代码
当然也能够按需参加其他扩展值,比方我们就在返回对象中添加了接口调用时间
timestamp: 接口调用时间
定义返回对象
@Data
public class ResultData {
/* 结果状态 ,详细状态码参见ResultData.java/
private int status;
private String message;
private T data;
private long timestamp ;
public ResultData (){
this.timestamp = System.currentTimeMillis();

}
public static ResultData success(T data) {
ResultData resultData = https://www.it610.com/article/new ResultData<>(); resultData.setStatus(ReturnCode.RC100.getCode()); resultData.setMessage(ReturnCode.RC100.getMessage()); resultData.setData(data); return resultData;

}
public static ResultData fail(int code, String message) {
ResultData resultData = https://www.it610.com/article/new ResultData<>(); resultData.setStatus(code); resultData.setMessage(message); return resultData;

}
}
复制代码
定义状态码
public enum ReturnCode {
/**操作胜利**/ RC100(100,"操作胜利"), /**操作失败**/ RC999(999,"操作失败"), /**效劳限流**/ RC200(200,"效劳开启限流维护,请稍后再试!"), /**效劳降级**/ RC201(201,"效劳开启降级维护,请稍后再试!"), /**热点参数限流**/ RC202(202,"热点参数限流,请稍后再试!"), /**系统规则不满足**/ RC203(203,"系统规则不满足请求,请稍后再试!"), /**受权规则不经过**/ RC204(204,"受权规则不经过,请稍后再试!"), /**access_denied**/ RC403(403,"无访问权限,请联络管理员授予权限"), /**access_denied**/ RC401(401,"匿名用户访问无权限资源时的异常"), /**效劳异常**/ RC500(500,"系统异常,请稍后重试"), INVALID_TOKEN(2001,"访问令牌不合法"), ACCESS_DENIED(2003,"没有权限访问该资源"), CLIENT_AUTHENTICATION_FAILED(1001,"客户端认证失败"), USERNAME_OR_PASSWORD_ERROR(1002,"用户名或密码错误"), UNSUPPORTED_GRANT_TYPE(1003, "不支持的认证形式"); /**自定义状态码**/ private final int code; /**自定义描绘**/ private final String message; ReturnCode(int code, String message){ this.code = code; this.message = message; } public int getCode() { return code; } public String getMessage() { return message; }

}
复制代码
统一返回格式
@GetMapping("/hello")
public ResultData getStr(){
return ResultData.success("hello,javadaily");

}
复制代码
此时调用接口获取到的返回值是这样:
【左神-算法与数据结构全阶班】{
"status": 100,
"message": "hello,javadaily",
"data": null,
"timestamp": 1625736481648,
"httpStatus": 0
}

    推荐阅读