APIJSON Version/APIJSON 版本号
6.1.0
Database Type & Version/数据库类型及版本号
MySQL8
Environment/环境信息
- JDK/基础库:1.8
- OS/系统:Linux centos7/window10
APIAuto Screenshots/APIAuto 请求与结果完整截屏
有数据正常返回
查询不到数据时,期望返回每个key,而不是像这样什么都不返回
Current Behavior/问题描述
有数据正常返回
![image](https://github.com/Tencent/APIJSON/assets/31918243/a92bd994-a7ad-4369-9034-a20d699fa514)
查询不到数据时,期望返回每个key,而不是像这样什么都不返回
![image](https://github.com/Tencent/APIJSON/assets/31918243/74811ad8-d5dd-4a07-aef2-b1c3136724da)
Expected Behavior/期望结果
No response
Any additional comments?/其它补充说明?
No response
7条答案
按热度按时间8hhllhi21#
用 SQL 函数 ifnull
"@column":"id;ifnull(type,0):type"
或者写 APIJSON 远程函数并调用:
"type()":"getWithDefault(type,0)"
mbskvtky2#
单个字段为空可以这样,如果DeviceType查询不到数据时,连DeviceType:{} 都不会返回的,只有 code码、msg等信息
s4n0splo3#
对象内只要有一个字段不为 null,就会返回这个对象,简单试试就知道的事情,先试了再说
lvjbypge4#
我试过了,项目中自己在使用了,对象内只要有一个字段不为 null,确实会返回这个对象,但是如果所有字段都是null,整个对象就不返回了,前端反映要求把整个对象字段都要返回,只不过每个字段都是null或者空字符串
wrrgggsh5#
这个要求很不合理,一般用传统方式也一样是对象内没有有效字段就不返回整个对象的。
前端应该自己判空,不能依赖后端传这种无效数据,否则不方便判断 是 查不到值 还是 查到值但为 null,
本来
if (对象 != null) {
// UI 绑定数据逻辑
}
就可以简单判断,现在要先拿到对象,再对比里面的具体值来判断了。
而且按这种做法,一般几层嵌套的数据,会返回大量无效的数据,还浪费带宽和流量,减慢传输速度。
这还只是单层,想想多层嵌套得多恶心
avwztpqn6#
你说的确实有道理,那我再和前段沟通一下,如果单个字段为空也需要返回的话,除了ifnull函数和远程函数之外我是否可以全局设置直接改fastjson序列化方式,为空也返回呢
打算在这改返回值的,但是这个方法返回的是JSONObject,fastjson又没有方法可以指定返回值是JSONObject类型的序列化方法,所以目前没找到好的方式来设置出参序列化方式
xqnpmsa87#
可以设置 fastjson 返回 null,但 parseResponse 返回的类型是 JSONObject,明显不能这样,改 parse 方法就行。
或者每个万能通用接口 Controller 的方法处理下