今天我遇到一个挺有意思的情况,就是前端项目传入null值,结果到了后端就变成了"null "字符串(你能想象吗,后面居然还有个空格)。我花了一段时间试图搞清楚这是怎么回事,最后发现这是因为数据传输时的处理方式有问题。
其实,虽然名字里有JS,但JSON并不是只有JavaScript才能用,而是一种独立于语言的文本格式(跟markdown和XML差不多)。很多编程语言都可以处理JSON,所以它成了不同语言间传递数据的好工具。在实际操作中,前端会把参数转换成JSON字符串。
但你知道吗,数据传输时是不能直接传递对象的,所以实际传递时,要把所有类型的数据都转换成字符串或数字。
等后端收到参数时,其实它也不知道收到的是什么类型的数据,只能按照规定好的参数类型尝试把字符串转换回去。但因为JSON里只有字符串和数字,所以如果传的是null,前端只能把它转换成"null",这就导致后端收到的也是"null",甚至无法区分真正的null和字符串"null"。
这其实不是个问题,而是因为JSON的原理就是这样,数据只能以字符串的形式传递。要解决这个问题,我们可以在前端加入一个拦截器,过滤掉那些空的参数。这样,如果参数是空的,就让它不传过去,后端收到就是实实在在的null了。