字典类型的字段没有值时,后端该返回 0 还是 null - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nikoxie
V2EX    科技

字典类型的字段没有值时,后端该返回 0 还是 null

  •  
  •   nikoxie 2024-08-19 10:23:12 +08:00 1900 次点击
    这是一个创建于 420 天前的主题,其中的信息可能已经有所发展或是发生改变。

    起因是有些字段不是必填项,是通过字典维护的,值是 int 类型,前端希望返回值就是 null 或者空串方便展示,后端这边认为数字类型默认值就是 0 ,数据库默认值也是 0, 应该由前端处理,想问下大家平时是怎么处理的?

    18 条回复    2024-08-19 19:02:24 +08:00
    Paracosm
        1
    Paracosm  
       2024-08-19 10:25:51 +08:00
    小公司,组内没有那么严格,一般跟前端约定,想要什么我就返回什么。。。。不过如果是 int 类型的话我默认也是传数据库的默认值
    yannxia
        2
    yannxia  
       2024-08-19 10:27:17 +08:00
    合理应该是 null ,
    - 0: 此字段是必填项,但是有默认值
    - Null: 此字段是非填项
    zhangdp
        3
    zhangdp  
       2024-08-19 10:33:22 +08:00
    返回 0 的话你们要怎么跟值真的为 0 的区分开?
    IvanLi127
        4
    IvanLi127  
       2024-08-19 10:34:13 +08:00
    理论上得是 null ,除非你们已经定义了字典值是 0 表示用户未选择。这个情况我觉得在定义上有得商量。
    nikoxie
        5
    div class="sep3"> nikoxie  
    OP
       2024-08-19 10:35:27 +08:00
    @yannxia 我也觉得是这样,但是现在后端不想处理。。。
    sagaxu
        6
    sagaxu  
       2024-08-19 10:36:26 +08:00
    没有值的时候,就不该返回这个字段
    xiangyuecn
        7
    xiangyuecn  
       2024-08-19 10:38:05 +08:00
    没有提供值,那就 null 或者不返回此字段

    可以返回 0 的情况,只有这个字段本身不包含 0
    wu00
        8
    wu00  
       2024-08-19 10:39:36 +08:00
    不想处理,那 0 就 0 呗,大不了后面用-1 表示未填,0 表示 0
    nikoxie
        9
    nikoxie  
    OP
       2024-08-19 10:40:21 +08:00
    @zhangdp
    @IvanLi127 会存在为 0 的项,现在就混淆了,本来想前端放拦截器处理,想了想也不行,没法统一判断是不是真的要转成 null ,只能针对字段处理,太繁琐了,维护也麻烦
    potatowish
        10
    potatowish  
       2024-08-19 10:41:23 +08:00 via iPhone
    返回 null ,后端判断下就可以了,返回 0 的做法纯粹是后端偷懒
    Vegetable
        11
    Vegetable  
       2024-08-19 10:44:09 +08:00
    前端有理
    ala2008
        12
    ala2008  
       2024-08-19 11:02:30 +08:00
    应该是 Integer 类型,不返回最好
    vishun
        13
    vishun  
       2024-08-19 14:49:58 +08:00
    `数据库默认也是 0`,这可以转变成数据库字段设计要不要为 null ,有些人喜欢用 null ,有些人喜欢用默认值 0 ,个人感觉按照数据库来就行了,数据库是什么返回就是什么。
    pkoukk
        14
    pkoukk  
       2024-08-19 14:54:55 +08:00
    有公司规范或者代码规范,就是他说得对
    没有就是你对
    vishun
        15
    vishun  
       2024-08-19 14:58:29 +08:00
    @nikoxie #9 如果 0 能混淆,你数据库设计时为什么会设计为 not null 且默认值是 0 呢,要改也是从数据库改,仅仅是后端程序不可能判定出是否混淆。
    matepi
        16
    matepi  
       2024-08-19 15:09:40 +08:00
    为什么不是不传?

    从语义较优的感觉上
    不传 > 空串 > 0 = null

    平时怎么处理,看团队、看项目规范
    loading
        17
    loading  
       2024-08-19 15:11:35 +08:00
    你的 api 没有设计 404 吗?
    返回 0 和 NULL 都是不对的。
    nikoxie
        18
    nikoxie  
    OP
       2024-08-19 19:02:24 +08:00
    @vishun 我也挺疑惑的,这是我一个前端同事跟其他部门对接时碰到的问题,至少在当前情况下我认为返回 0 是肯定有问题的,默认值也不应该是 0

    @matepi create 的时候前端是可以不传的,现在主要是详情接口的后端返回值会是 0 ,他们 dto 里肯定有这个字段的

    @loading 可以详细说说吗,请问具体是怎么设计呢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5836 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 06:28 PVG 14:28 LAX 23:28 JFK 02:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86