问题描述:
写了一个实体类dto作为参数传递,在用Postman进行接口测试时,发现从controller层获取到的日期(startTime)前多了一个逗号(,),从而导致查询结果出错。
"startTime": ",2020-08-05"
问题排查:
1、首先排查了Postman中传入的数据,并未发现有多余的逗号。
2、其次排查了接口相关的调用方法,也并未发现有涉及到添加逗号的操作。
3、对参数解析进行排查
(1)因涉及到的参数太多,于是去掉所有非必要参数,JSON数据解析正常,查询结果正常
(2)恢复所有非必要参数,JSON数据解析出现上述问题(日期数据前多了一个逗号),查询结果出错
(3)锁定问题出现在非必要参数的解析后,通过认真排查,发现日期(startTime)作为参数传递时出现了重复,错误原因锁定
解决方法:
将重复的日期参数去掉,JSON数据解析正常,查询结果正常。
拓展分析:
经过测试发现,如果同一个参数在传递过程中出现了重复赋值,那在数据解析的过程中,重复传入的值将会通过以逗号隔开的方式被拼接,然后进行传递,即便在重复赋值时,重复参数的其中一个并未传递实际的值(null或者""),在进行JSON数据解析后,参数值依旧会被拼接,如下所示:
// 传入的 JSON
{
"startTime":,
"startTime": "2020-08-05",
"endTime": "2020-08-05",
"endTime": "2020-08-06"
}
//接收到的参数
"sTime": ",2020-08-05"
"eTime": "2020-08-05,2020-08-06"
如果从未遇到过这类问题,可能排查起来也需要一点时间,不过有了经验之后,如果再遇到类似问题,便可迅速定位到问题所在,并将其解决。