引言

JavaLib很早就实现了Result模块,我也一直在用,但那是针对公用API接口的,如果后端开发人员也像那样写API接口给前端的话,非常麻烦,所以,很早就决定要重写了,我也是参考了很多人的,看Spring Builder模式,有点糊涂,设计算是失败了。

概要

我们先来看一下,长什么样吧。

public class App {public static void main(String[] args) {// 成功,无数据,自定义返回码和描述Result result1 = ResultResponseUtil.ok().code(0).msg("Success");// 成功,返回数据,自定义返回码和描述Result result2 = ResultResponseUtil.ok().code(0).msg("Success").data("data");// 成功,无数据,通过enum方式存放返回码Result result3 = ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS);// 成功,返回数据,通过enum方式存放返回码Result result4 = ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS).data("data");// 失败,无数据,自定义返回码和描述Result result5 = ResultResponseUtil.error().code(-1).msg("Error");// 失败,返回数据,自定义返回码和描述Result result6 = ResultResponseUtil.error().code(-1).msg("Error").data("data");// 失败,无数据,通过enum方式存放返回码Result result7 = ResultResponseUtil.error().status(DefaultReturnCode.ERROR_INIT);// 失败,返回数据,通过enum方式存放返回码Result result8 = ResultResponseUtil.error().status(DefaultReturnCode.ERROR_INIT).data("data");Console.info(result1);Console.info(result2);Console.info(result3);Console.info(result4);Console.info(result5);Console.info(result6);Console.info(result7);Console.info(result8);Console.info();Console.info(new Gson().toJson(result1));Console.info(new Gson().toJson(result2));Console.info(new Gson().toJson(result3));Console.info(new Gson().toJson(result4));Console.info(new Gson().toJson(result5));Console.info(new Gson().toJson(result6));Console.info(new Gson().toJson(result7));Console.info(new Gson().toJson(result8));}
}

打印结果:

DefaultResult{code=0 success=true msg=Success data=null}
DefaultResult{code=0 success=true msg=Success data=data}
DefaultResult{code=0 success=true msg=Success data=null}
DefaultResult{code=0 success=true msg=Success data=data}
DefaultResult{code=-1 success=false msg=Error data=null}
DefaultResult{code=-1 success=false msg=Error data=data}
DefaultResult{code=-1 success=false msg=init... data=null}
DefaultResult{code=-1 success=false msg=init... data=data}{"success":true,"code":0,"msg":"Success"}
{"success":true,"code":0,"msg":"Success","data":"data"}
{"success":true,"code":0,"msg":"Success"}
{"success":true,"code":0,"msg":"Success","data":"data"}
{"success":false,"code":-1,"msg":"Error"}
{"success":false,"code":-1,"msg":"Error","data":"data"}
{"success":false,"code":-1,"msg":"init..."}
{"success":false,"code":-1,"msg":"init...","data":"data"}

使用

import com.fengwenyi.javalib.result.DefaultReturnCode;
import com.fengwenyi.javalib.result.Result;
import com.fengwenyi.javalib.result.ResultResponseUtil;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class ApiResultApplication {public static void main(String[] args) {SpringApplication.run(ApiResultApplication.class, args);}/*** 获取所有用户数据* @return (json)*/@GetMapping("/getUsers")public Result getUsers() {User user1 = new User().setName("冯文议").setAge(26).setGender("男");User user2 = new User().setName("张三").setAge(25).setGender("女");User user3 = new User().setName("李四").setAge(23).setGender("保密");User user4 = new User().setName("王五").setAge(20).setGender("未知");User [] users = {user1, user2, user3, user4};return ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS).data(users);}
}@Data
@Accessors(chain = true)
class User {// 姓名private String name;// 年龄private Integer age;// 性别private String gender;}

结果(已格式化):

{"code":0,"msg":"Success","data":[{"name":"冯文议","age":26,"gender":"男"},{"name":"张三","age":25,"gender":"女"},{"name":"李四","age":23,"gender":"保密"},{"name":"王五","age":20,"gender":"未知"}],"success":true
}

这样存在一个问题,也是上个版本有的,我们修改一下代码:

//return ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS).data(users);
return ResultResponseUtil.ok().code(0).data(users);

看结果:

API返回值存在 null,相信你一定遇到了这个问题,那我们怎么避免这个问题呢?网上有很多解决办法,我想说的是,我们还是应该按规则来写,写全写完整。

我们再来看看另外一种处理方式:

    @GetMapping("/getUsers2")public String getUsers2() {User user1 = new User().setName("冯文议").setAge(26).setGender("男");User user2 = new User().setName("张三").setAge(25).setGender("女");User user3 = new User().setName("李四").setAge(23).setGender("保密");User user4 = new User().setName("王五").setAge(20).setGender("未知");User [] users = {user1, user2, user3, user4};Result result = ResultResponseUtil.ok().status(DefaultReturnCode.SUCCESS).data(users);return new Gson().toJson(result);}

写公用接口的时候,我们一定要注意,避免所有的不必要。

资料

【1】 JavaLib

【2】 JavaLib Result模块测试代码

【3】 SpringMVC返回结果的封装

【4】 JavaLib | result 模块

JavaLib | Result让你的API接口统一化(2)相关推荐

  1. 微服务架构之公共模块式中创建API接口统一返回结果ApiResult

    微服务架构之API接口统一返回结果ApiResult 一.创建公共模块common步骤 二.在api中新建一个ApiCode枚举和ApiResult 三.ApiCode与ApiResult编码如下 四 ...

  2. axios二次封装以及API接口统一管理

    前端向服务器发送请求,使用的方法有很多: XMLHttpRequest.fetch.JQ.axios 1.axios二次封装 二次封装axios是为了请求拦截器.响应拦截器. 请求拦截器:可以在发送请 ...

  3. Java设计API 接口统一返回格式

    前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式. 一般系统的大致整体架构图如下: 本篇关注点为API接口,所以架构图有所不同 接口交互 前端和后端进行 ...

  4. Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 无侵入式 统一返回JSON格式 其实本没有没打算写这篇博客 ...

  5. Spring Boot 无侵入式 实现API接口统一JSON格式返回

    作者 | 小魏小魏我们去那里呀 来源 | blog.csdn.net/qq_34347620/article/details/102239179 无侵入式 统一返回JSON格式 其实本没有没打算写这篇 ...

  6. Java API接口统一格式返回结果类

    废话不多说,直接正文. 首先,我们需要定义规则(返回的格式).如http的返回状态码 404,500,200等.我们都知道404是找不到资源,200是正常的.由此可以知道,每一个状态码都有一个对应的说 ...

  7. axios封装,api接口封装统一管理

    axios封装,api接口封装统一管理 一. axios说明 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. axios的封装和api接口的统一管理, ...

  8. API接口的RESTful设计

    前言:今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常. 一般系统的大致整体架构图如下: 因为本篇博客主要介绍的是API接口,其他 ...

  9. axios get 某个参数是数组怎么传_Vue 中 Axios 的封装和 API 接口的管理

    我们所要的说的axios的封装和api接口的统一管理,其实主要目的就是在帮助我们简化代码和利于后期的更新维护. 一.axios的封装 在vue项目中,和后台交互获取数据这块,我们通常使用的是axios ...

最新文章

  1. python适合零基础学习吗-Python适合不适合零基础学习呢?老男孩教育
  2. 可降阶的高阶微分方程
  3. linux下开启程序崩溃生成core文件开关之ulimit详解
  4. 为什么你做的H5开屏那么慢?H5首屏秒开方案探讨
  5. 矩阵存储 oracle表,二种矩阵存储方式汇总比较
  6. 【医院综合管理专题】医院服务质量管理制度与规范
  7. 时序图与状态图(Rose) - Windows XP经典软件系列
  8. python字典浅复制_元组,字典,浅复制,集合
  9. windows server 2008 远程桌面(授权、普通用户登录)
  10. 计算机二级C语言选择题怎么做?要注意些什么?(易错点难点总结笔记)
  11. iOS获取当前设备型号等信息总结 包含iPhone7和iPhone7P
  12. python中成语接龙游戏_python——成语接龙小游戏
  13. ae中计算机打字预设,Typewriter Pro(AE电脑打字动画特效预设)
  14. 优化用电,安全省心,同为(TOWE)智能循环定时桌面PDU插座APZ-1013DX
  15. 【book】计算机组成原理
  16. 全国地区 mysql表_数据库表地址数据(中国地区)
  17. 简易日历(innerHTML)
  18. 化学lims实验室信息管理系统推荐
  19. OneKey 一键还原 8.1.0.314
  20. 有没有好用的gif图片制作器?分享制作方式方法

热门文章

  1. URL不支持Post的方法——解决方法
  2. 文心一言正式对标GPT-4,是青铜还是王者?
  3. win10快捷键冲突检测与解决方法
  4. java做钢琴为什么没有声音_钢琴突然没声音了是怎么回事
  5. 全球及中国皮革行业产量规模与十四五发展模式分析报告2022版
  6. P 3802 小魔女帕琪(期望)
  7. STM32+4G模块与服务器通信
  8. mysql 查询被阻塞_查找MySQL查询语句被阻塞阻塞原因
  9. 差点崩溃了,还好有主从复制!
  10. mysql 删除重复数据 保留一个_MySQL学习笔记-删除重复数据只保留一条