关于前后端交互数据为空时,String类型参数接收为null还是空字符串的问题

文章讲述了在进行接口测试时,前端页面与Postman对员工表模糊查询产生不同结果的问题。当前端未传name参数时,后端接收到的是空字符串,而在Postman中则是null,导致空指针异常。作者通过调试指出,对于String类型字段,必须检查是否为空字符串,而不仅仅是null,以避免错误。并提供了正确的动态SQL写法示例。
摘要由CSDN通过智能技术生成

今天项目里出现了一个小问题,在测试对员工表模糊条件查询的时候,发现用前端页面上能正常运行,但是在postman测试时,就会报空指针异常。

先看接口文档里前端请求数据样例:

/emps?name=张&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10

在java程序中参数name是String类型,因为是模糊查询,所以在业务层使用了trim()方法,去除了name首尾的空格。问题就出在这里,完成功能之后使用postman进行测试,因为是条件查询,所以name可以不传值。

postman中的请求
http://localhost:8080/emps?page=1&pageSize=5

前端页面的请求
http://localhost:90/api/emps?name=&gender=&begin=&end=&page=1&pageSize=5

在postman中发送请求时,会产生空指针异常,这很好理解,因为name没有值是NULL,所以在调用trim()方法时会空指针异常,但是前端页面为什么不会报错呢?

接下来使用断点调试看看其中的原因:

postman请求下接收到的数据:

page = {Integer@9141} 1
pageSize = {Integer@9142} 5
name = null
gender = null
begin = null
end = null


前端请求下接收到的数据:

page = {Integer@7808} 1
pageSize = {Integer@7809} 5
name = ""
gender = null
begin = null
end = null

不难看出,在name没有拼接在url后面的时候,String类型的name的值为null,但是name在拼接到url后面之后,name接收到的数据是""(空字符串)。

由此得出结论,对于String类型,在前端没有传递值的情况下,后端接收到的都是空字符串,而不是null。

由这个结论可以得出一个重要的注意事项,那就是以后在写动态sql的时候,如果字段类型是String,那么在if条件里面一定要判断是否为空字符串,不然很有可能会产生错误哦,你学到了吗?

#正确示范
<if test="name != null and name != ''">
    name = #{name},
</if>


#错误写法
<if test="name != null">
    name = #{name},
</if>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值