String.valueOf(null) 产生的 Bug: 数据库中存储了 “null“ 字符串

博客讨论了SpringCloud接口在处理null参数时,由于String.valueOf()方法的使用,导致数据库中存储了字符串"null"而非预期的null值。作者分析了Java String类的valueOf()方法源码,指出该方法在参数为null时会返回"null"字符串,这在框架底层转换中引发问题。解决方案是对接口参数进行判空处理,以防止类似bug的发生。
摘要由CSDN通过智能技术生成

最近出现一个莫名奇妙的问题: 数据库中存储了 "null" 字符串……

用的 SpringCloud 远程调用接口, 传参为 null, 接到的参数值: “null”,导致上文的bug.

当时只能单独写了一个方法处理 “null”,对其进行了转换。

原因分析:

Java String 类源码:


    /**
     * Returns the string representation of the {@code Object} argument.
     *
     * @param   obj   an {@code Object}.
     * @return  if the argument is {@code null}, then a string equal to
     *          {@code "null"}; otherwise, the value of
     *          {@code obj.toString()} is returned.
     * @see     java.lang.Object#toString()
     */
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

String 类的 valueOf() 方法,如果接收到的参数是 null, 会将其转换为 “null”.

框架底层在做参数数据转换时, 直接使用了 valueOf() 方法,就会让 “null” 存储到数据库中。

看来 “先人” 们的代码也会有 Bug,String.valueOf(Object obj) 方法建议少用,或者用之前先判空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值