数值类型的字段如何针对传参为 null 或者空字符串做不同的处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shanghai1943
V2EX    Java

数值类型的字段如何针对传参为 null 或者空字符串做不同的处理

  •  
  •   shanghai1943 2023 年 11 月 2 日 2308 次点击
    这是一个创建于 906 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目后端用的是 jdk8 + springboot

    用户需要清空某个数量或者金额,然后这时候前端会传空字符串""过来;另外项目里约定,如果某个字段传 null 的话,则认为这个字段无需修改。

    所以后端每次遇到这种清空数值的场景,都需要针对这个字段在进行反序列化的时候做额外的处理,判断是否传了空串过来,假如传了空串的话,则做一个标记,后续业务需要识别标记做处理。

    目前项目里已经好多个地方遇到这种场景了,但是没有很好的抽象以及复用,以至于每个字段都写一些反序列化的代码来处理,挺麻烦的。

    想请教各位大哥,你们是否有遇到过类似的场景,都如何解决的。

    第 1 条附言    2023 年 11 月 16 日

    目前打算改为客户端传参的时候,如果需要清空字段的值,则传 null 过来,request body 里是{"name":null},如果无需更改字段的值,则传undefined,客户端在序列化的时候会剔除掉这个字段,相当于 request body 里不会有这个字段,类似于{}

    然后 Java 对象里需要声明该字段为Optional<String> name,根据name==null还是name.isEmpty来判断客户端传的值

    GPT 给的反馈是不建议在类里用Optional,认为这有悖于 Optional 的设计初衷。

    重要的是要注意,在 Java 中,Optional 类型的使用更多是为了表示可选的返回类型或方法参数,并不推荐直接用于类的字段。这是因为 Optional 类型的设计初衷是为了提供一种更优雅的方式来处理可能为 null 的值,而不是作为一种数据存储机制。在实践中,应避免在类字段中使用 Optional,并且在 JSON 序列化/反序列化时应特别小心处理。 
    3 条回复    2023-11-03 07:40:56 +08:00
    zsdroid
        1
    zsdroid  
       2023 年 11 月 2 日
    @TableField(value = "name", updateStrategy=FieldStrategy.IGNORED)
    dorothyREN
        2
    dorothyREN  
       2023 年 11 月 2 日
    fi field = null or field = ''
    tedzhou1221
        3
    tedzhou1221  
       2023 年 11 月 3 日 via iPhone
    #1 用的是 mybatis plus 吧
    关于     帮助文档     自助推广系统 &nsp;   博客     API     FAQ     Solana     907 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 19:43 PVG 03:43 LAX 12:43 JFK 15:43
    Do have faith in what you're doing.
    ubao msn 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