上周看了下Java统一返回R类的相关知识点,今天呢,已经下班了,正好没啥事就来给大家来整理下这方面知识文章,希望能在编程的世界中助大家一臂之力,老规矩,废话上说,开始干吧。
1、为什么使用统一封装R类
在项目中,尤其是多人开发的项目中,如果不进行统一封装数据返回,没有固定格式返回,你可以想象一下前端在对接口绑定的时候,前端那个头大啊。因此在开发时,一般会返回统一格式,封装成固定格式JSON,这样前端在绑定接口时,就能很能清楚的描述返回数据状态和返回的具体数据就可以。一般返回数据中包含状态码、返回信息和数据。
2、统一返回数据格式
{
"code":数字, //响应码
"message":字符串,//返回状态消息
"data":T泛型,//返回数据
}
3、创建统一结果返回类
3.1、创建接口返回定义状态码和状态 消息
状态码和消息可以直接写入,也可以采用枚举来进行定义,这里我才用枚举方法,代码实例如下所示:
ResponseConstantEnum枚举类:
package com.ygl.test02.constant;
import lombok.Data;
import lombok.Getter;
/**
* 返回编码枚举类
*
* @author yan
* @version 1.0
* @date 2021/7/20 17:23
*/
@Getter
public enum ResponseConstantEnum {
/**
* 操作成功
*/
SUCCESS(200,"操作成功"),
/**
* 错误请求
*/
ERROR(400,"错误请求"),
/**
* 请求页面未找到
*/
NOTFINDERROR(404,"请求页面未找到"),
/**
* 系统异常
*/
SYSERROR(-1, "系统异常");
//请求响应码
private final Integer resultCode;
//请求响应消息
private final String resultMessage;
ResponseConstantEnum(Integer resultCode, String resultMessage) {
this.resultCode = resultCode;
this.resultMessage = resultMessage;
}
public static ResponseConstantEnum get(Integer code) {
//value()方法可以将枚举类转变为一个枚举类型的数组
for (ResponseConstantEnum responseConstantEnum : ResponseConstantEnum.values()) {
if (code == responseConstantEnum.getResultCode()) {
return responseConstantEnum;
}
}
return ResponseConstantEnum.ERROR;
}
}
上面只写了部分常用的状态码和状态消息,大家可以根据自身需要来继续添加其状态码和消息。
3.2、创建返回结果R类
Response代码如下所示:
package com.ygl.test02.util;
import lombok.Data;
import com.ygl.test02.constant.ResponseConstantEnum;
/**
* TODO
* R类封装返回工具类
*
* @author ygl
* @version V1.0
* @since 2021-07-20 17:16
**/
@Data
public class Response<T> {
private static final long serialVersionUID = 1L;
//响应码
private Integer code;
//返回消息
private String message;
//返回数据
private T data;
/**
* 操作成功ok方法
*/
public static <T> Response<T> ok(T data) {
Response<T> response = new Response();
response.setCode(ResponseConstantEnum.SUCCESS.getResultCode());
response.setMessage(ResponseConstantEnum.SUCCESS.getResultMessage());
response.setData(data);
return response;
}
/**
* 编译失败方法
*/
public static Response buildFailure(Integer errCode, String errMessage){
Response response = new Response();
response.setCode(errCode);
response.setMessage(errMessage);
return response;
}
}
上面R类中我只写了两个方法,分别是操作成功返回方法和编译失败返回的方法,同样大家可以根据自己的需求来进行方法重写和添加方法。
3.3、项目结构
4、R类使用
@RestController
@RequestMapping("/test")
@ConfigurationProperties(prefix = "urls")
@Data
public class TestController {
/**
* 测试使用R类统一返回
* TODO
* @param
* @return null
* @author ygl
* @date 2021/7/28 11:20
**/
@GetMapping("/testResponse")
public Response<List<People>> testResponse(){
People people1 = new People();
people1.setName("ygl");
people1.setAddress("中国 台湾");
people1.setAge(25);
List<People> peopleArrayList = new ArrayList<>();
peopleArrayList.add(people1);
//编译失败返回
//return Response.buildFailure(500,"编译出错");
//运行成功返回,调用ok()方法
return Response.ok(peopleArrayList);
}
}
好了,R类的分享就到这里了,大家有那些不太懂或者我的分享中有出错的地方,希望大家在评论中指出。
一键三联哦,拜拜~~~~下期见