数值类型的字段如何针对传参为 null 或者空字符串做不同的处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
shanghai1943
V2EX    Java

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

  •  
  •   shanghai1943 Nov 2, 2023 2311 views
    This topic created in 907 days ago, the information mentioned may be changed or developed.

    项目后端用的是 jdk8 + springboot

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

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

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

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

    Supplement 1    Nov 16, 2023

    目前打算改为客户端传参的时候,如果需要清空字段的值,则传 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 replies    2023-11-03 07:40:56 +08:00
    zsdroid
        1
    zsdroid  
       Nov 2, 2023
    @TableField(value = "name", updateStrategy=FieldStrategy.IGNORED)
    dorothyREN
        2
    dorothyREN  
       Nov 2, 2023
    fi field = null or field = ''
    tedzhou1221
        3
    tedzhou1221  
       Nov 3, 2023 via iPhone
    #1 用的是 mybatis plus 吧
    About         Advertise     Blog     API     FAQ     Solana     2634 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 15:56 PVG 23:56 LAX 08:56 JFK 11:56
    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