天才用户取用户名为null,害我熬夜查到两点钟。。

前几天看到一篇贴子,真的很感同身受——“天才用户取用户名为null,害我熬夜查到两点”……这谁没遇到过类似的bug?

图片

但如果我们要从一个开发者的角度去看,还真得把那层调侃的外衣扒了,看看里面到底踩的是哪门子坑。贴子虽然搞笑,背后的技术问题却一点不轻松,甚至可以说是“祖传坑”。

图片

先说明一下,原帖说的“null”到底是啥意思,这不是Java的null关键字,而是一个字符串,也就是"null",用英文引号括起来的那个,是有内容的,不是空。你把这个当成空值处理,那基本就是在写bug。

这个坑最常见的场景,就是你在做用户注册或者处理输入时,没判断输入的值是不是故意输入的"null",系统就把它当成了一个“真空值”处理,结果各种异常报错就来了。有一次我在写一个后端注册接口,前端传了一个json:

{
  "username": "null",
  "password": "123456"
}

我当时后台代码是这样的:

if (user.getUsername() == null) {
    thrownew IllegalArgumentException("用户名不能为空");
}

你猜怎么着?这段代码屁都没报错,因为"null"这个字符串根本不是null,它是有内容的字符串,结果这个用户就“合法”注册进系统里了。等到要发邮件、要加权限,甚至检查重名时,才发现怎么一个用户叫null,简直像个幽灵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值