【JAVA】项目实战功能——项目自定义通用响应对象

发布时间:2024年01月12日


前言

在Spring Boot项目中,通用返回对象是一种用于封装接口统一返回结果的模式,它能够提高接口的可读性、可维护性,并且规范了接口的返回格式。通常,开发人员使用一个统一的数据结构来包裹接口返回的数据,这就是通用返回对象。
一般每个团队都会有自己的接口规范,比如调用api接口返回的响应报文结构需要指定结构,就需要我们使用通用的返回对象了


提示:以下是本篇文章正文内容,下面案例可供参考

一、特点

  • 统一结构: 通用返回对象定义了统一的数据结构,包括状态码、消息和数据等字段,使得接口的返回格式一致。
  • 异常处理: 通用返回对象通常包含了异常处理机制,能够更好地处理业务异常,使得异常信息更加友好。
  • 规范约定: 使用通用返回对象可以规范接口的返回,减少了在不同接口中定义不同的返回结构的情况。
  • 可扩展性: 通用返回对象是可扩展的,可以根据具体业务需要在其中加入更多的字段,例如时间戳、请求ID等。

二、代码

直接贴代码例子
1、首先在自己的项目下创建一个目录名为 response的包
在这里插入图片描述

2、创建三个class类 ResponseResult、ResponseResultCount、ResponseResultData

①ResponseResult类

@JsonIgnoreProperties(
    ignoreUnknown = true
)
public class ResponseResult {
    //"状态码(0成功,非0失败)"
    private int code;
    //"状态码说明"
    private String msg = "ok";

    public ResponseResult() {
    }

    public int getCode() {
        return this.code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return this.msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public boolean isSuccess() {
        return 0 == this.code;
    }

    public static ResponseResult success() {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setCode(0);
        return responseResult;
    }

    public static ResponseResult fail(String msg) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setCode(-1);
        responseResult.setMsg(msg);
        return responseResult;
    }
}

②ResponseResultCount

@JsonIgnoreProperties(
    ignoreUnknown = true
)
public class ResponseResultCount<T> {
    //"状态码(0成功,非0失败)"
    private int code;
    //"状态码说明"
    private String msg = "ok";
   //"响应数据"
    private T data;
    //"总行数"
    private long count;

    public ResponseResultCount() {
    }

    public int getCode() {
        return this.code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return this.msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return this.data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public long getCount() {
        return this.count;
    }

    public void setCount(long count) {
        this.count = count;
    }

    public boolean isSuccess() {
        return 0 == this.code;
    }

    public static <T> ResponseResultCount<T> success(T data, long count) {
        ResponseResultCount<T> responseResultCount = new ResponseResultCount();
        responseResultCount.setCode(0);
        responseResultCount.setData(data);
        responseResultCount.setCount(count);
        return responseResultCount;
    }
}

③ResponseResultData

@JsonIgnoreProperties(
    ignoreUnknown = true
)
public class ResponseResultData<T> {
    //"状态码(0成功,非0失败)"
    private int code;
    //"状态码说明"
    private String msg = "ok";
    //"响应数据"
    private T data;

    public ResponseResultData() {
    }

    public int getCode() {
        return this.code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return this.msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return this.data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public boolean isSuccess() {
        return 0 == this.code;
    }

    public static <T> ResponseResultData<T> success(T data) {
        ResponseResultData<T> responseResultData = new ResponseResultData();
        responseResultData.setCode(0);
        responseResultData.setData(data);
        return responseResultData;
    }

    public static <T> ResponseResultData<T> fail(String msg) {
        ResponseResultData<T> responseResultData = new ResponseResultData();
        responseResultData.setCode(-1);
        responseResultData.setMsg(msg);
        return responseResultData;
    }
}

三、使用

我这里定义了三个返回对象,分别对应不同的返回情况

第一个 ResponseResult使用场景

当接口只需要返回是否调用是否成功的结果,而不需要返回业务数据时,就用该ResponseResult响应对象即可
例:

    @PostMapping("/demo")
    public Response demo(@RequestParam Map<String, Object> requestBody){
         //业务场景处理
         if(xxxxxx){
         //出现异常或者业务需要返回错误
          return ResponseUtil.error("自定义错误信息")
         
         }
         //若接口成功调用则返回成功
        return ResponseUtill.success();
    }
    //该接口成功返回报文如下:
//    {
//	"code": 0,
//	"msg": "",
//	"success": true
//	}
     //接口返回错误信息如下,我这里失败统一返回-1了。大家可以根据情况自己增加错误码
//     {
//	"code": -1,
//	"msg": "自定义错误信息",
//	"success": false
//}
    

**

第二个ResponseResultCount使用场景

因为这个对象有一个count属性,一般接口需要返回数组列表数据的时候使用该响应对象

//获取用户列表
    @GetMapping("/getUsers")
    public ResponseResultCount<List<ReqTaskVO>> getReqTaskViews() {
        List<User> users= demoService.getDataList(Map<String, String> param);
        return ResponseResultCount.success(users,users.size());
    }
   // 该接口响应报文如下
{
  "code": 0,
  "msg": "ok",
  "data": [],
  "count": 0,
  "success": true
}

第三个ResponseResultData使用场景

这个对象和第二个有所不同的是没有count属性,也就不需要返回具体的个数,除了页面需要查看数据的个数除外,大部分情况都可适用

//根据用户id查询 用户详情信息
    @GetMapping("/getUserInfo")
    public ResponseResultData<User> getUserInfo(@RequestParam String userId) {
        User user= userService.getUserInfo(userId);
        return ResponseResultData.success(user);
    }
    //该接口的成功响应报文 如下
    {
  "code": 0,
  "msg": "ok",
  "data": {},
  "success": true
}
文章来源:https://blog.csdn.net/weixin_47142014/article/details/135535241
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。