APIJSON 查询不到数据,期望出参返回key,value为空,而不是什么都不返回怎么设置呢?

nbewdwxp  于 2个月前  发布在  其他
关注(0)|答案(7)|浏览(50)

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

8hhllhi2

8hhllhi21#

用 SQL 函数 ifnull
"@column":"id;ifnull(type,0):type"

或者写 APIJSON 远程函数并调用:
"type()":"getWithDefault(type,0)"

mbskvtky

mbskvtky2#

单个字段为空可以这样,如果DeviceType查询不到数据时,连DeviceType:{} 都不会返回的,只有 code码、msg等信息

s4n0splo

s4n0splo3#

对象内只要有一个字段不为 null,就会返回这个对象,简单试试就知道的事情,先试了再说

lvjbypge

lvjbypge4#

我试过了,项目中自己在使用了,对象内只要有一个字段不为 null,确实会返回这个对象,但是如果所有字段都是null,整个对象就不返回了,前端反映要求把整个对象字段都要返回,只不过每个字段都是null或者空字符串

wrrgggsh

wrrgggsh5#

这个要求很不合理,一般用传统方式也一样是对象内没有有效字段就不返回整个对象的。
前端应该自己判空,不能依赖后端传这种无效数据,否则不方便判断 是 查不到值 还是 查到值但为 null,
本来
if (对象 != null) {
// UI 绑定数据逻辑
}
就可以简单判断,现在要先拿到对象,再对比里面的具体值来判断了。

而且按这种做法,一般几层嵌套的数据,会返回大量无效的数据,还浪费带宽和流量,减慢传输速度。

{
    "Comment": {
        "id": null,
        "userId": null,
        "content": ""
        ...
    },
    "User": {
        "id": null,
        "name": "",
        "contactIdList": [],
        "pictureList": []
        ...
    },
    "Comment:reply": {
        "id": 0,
        "userId": 0,
        "content": ""
    },
    "User:reply": {
        "id": 0,
        "name": "",
        "contactIdList": [],
        "pictureList": []
    },
    ...
    "ok": true,
    "code": 200,
    "msg": "success"
}

这还只是单层,想想多层嵌套得多恶心

avwztpqn

avwztpqn6#

你说的确实有道理,那我再和前段沟通一下,如果单个字段为空也需要返回的话,除了ifnull函数和远程函数之外我是否可以全局设置直接改fastjson序列化方式,为空也返回呢


打算在这改返回值的,但是这个方法返回的是JSONObject,fastjson又没有方法可以指定返回值是JSONObject类型的序列化方法,所以目前没找到好的方式来设置出参序列化方式

xqnpmsa8

xqnpmsa87#

可以设置 fastjson 返回 null,但 parseResponse 返回的类型是 JSONObject,明显不能这样,改 parse 方法就行。
或者每个万能通用接口 Controller 的方法处理下

相关问题