请问,api接口数据统一返回处理怎么做呀?可以讲一下吗?

来源:5-1 大章列表查询功能开发1

杰神

2020-05-09

请问查询出来的数据返回给客户端怎样做统一处理呀?
示例一:

  {
  "success" : true,
  "data" : {
    "type" : "first"
  },
  "errCode" : "SUCCESS",
  "errMsg" : "请求成功",
  "sysTime" : 1585546735699
}

需要在数据外层再多包裹一层统一的自定义状态码和错误信息。客户端可以根据状态码来渲染数据或者弹出后台的错误信息
示例二:
mysql表中为空的字段,返回给客户端是null。比如说有个name字段是varchar,为空返回给客户端是null。客户端需要把name展示在页面上。如果客户端是弱类型语言,直接接口里面的读取到的null展示到页面就行。如果客户端是强类型语言,本来name在客户端应该是字符串类型,结果返回的是null,在客户端那边就会直接抛错,出现页面卡死或者白屏。这是我在工作中实际碰到过的,做flutter开发,使用的是dart强类型语言,客户端会拿到接口里面的json字符串数据,转换成dart的实体类,然后通过实体类把json字符串转换为dart对象,在页面中使用。如果后台把本来应该是String类型的返回成null了,就会直接导致实体类解析数据异常,那个接口就报错了。
图片描述
图片描述
Text(data.openid),这个时候openid为null。
flutter的Text文本控件第一个参数,必须是String类型,不能为null,如果直接把接口的字段填进去,就会抛异常报错。让客户端处理又不实际,因为客户端不知道什么字段可能会出异常,而且也没有办法做统一处理,因为客户端拿到的是json字符串,不知道这个字段本身到底应该是什么类型,没办法做处理。
实际上客户端应该拿到的是

  {
    "uid": 1,
    "openid": "",
    "phone": "",
    "nickname":"",
    "email": "",
    "uname": "",
    "sex": 0,
    "createTime":"",
    "updateTime": ""
  }

解决这种情况,我能想到两种方案,一种是在数据库设计的时候,设计默认值,还有一种是代码数据返回的时候,把null重新替换成该字段的字段类型所对应的默认值。比如说是String就返回“”,是int就返回0,是double就返回0.00,请问第二种情况怎么处理呀?

写回答

2回答

甲蛙

2020-05-09

  1.  可以在vue的拦截器里统一判断返回码,再做处理。参照我们现在vue拦截器打请求日志和返回日志的地方。

  2. 我实际项目中遇到过,所有的空字段都存了个空格或0,不过这种太麻烦。springboot对返回的json可以做包装,可以百度下,类似这遍文章:https://blog.csdn.net/javakeffer/article/details/102862910

0
4
杰神
非常感谢!
2020-05-09
共4条回复

杰神

提问者

2020-05-09

客户端即使是弱类型语言,如果是普通的字符串渲染到页面上没有关系,如果是需要做加减乘除运算,也会抛错。除去最开始给字段设置默认值。后台在接口返回的时候,是怎样避免这种情况发生的呢?

0
0

Spring Cloud+ Vue前后端分离开发企业级在线视频系统

全网稀缺课程 市场热门项目+主流框架 一课掌握前后端技术

1708 学习 · 1648 问题

查看课程