请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

  {
  "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 10:42:51
  1.  可以在vue的拦截器里统一判断返回码,再做处理。参照我们现在vue拦截器打请求日志和返回日志的地方。

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

0 回复 有任何疑惑可以回复我~
  • 提问者 杰神 #1
    客户端统一处理null值不太现实。字段太多了,客户端也不知道那个值为null的字段到底是什么数据类型,处理不了。而且REST API,接口文档里面写了字段是int类型,结果返回一个null,这本来就是后台的锅
    回复 有任何疑惑可以回复我~ 2020-05-09 10:57:29
  • 提问者 杰神 #2
    我发现还是在数据库设计的时候就设计默认值最靠谱
    回复 有任何疑惑可以回复我~ 2020-05-09 10:57:55
  • 甲蛙 回复 提问者 杰神 #3
    不是客户端统一处理null哦,是springboot在返回json时,统一处理下,将null字段转成“”再返回给前端。用默认值也可以的。
    回复 有任何疑惑可以回复我~ 2020-05-09 11:33:12
提问者 杰神 2020-05-09 10:27:38

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信