Parameter ‘array’ not found. Available parameters are [collection, list]
莫名其妙,今天写代码遇到个低级错误,困扰了好久,测试突然给提了个缺陷,说业务逻辑有问题
于是,就启动了缺陷排查的流程
1.问题复现
根据问题复现步骤,确实发现业务逻辑不对
2.代码排查
根据代码排查,业务逻辑确实写了,对表的更新
3.日志排查
根据日志排查,发现新增的代码并没有执行,而且,也没有报错。随后就进行了纠结(现在都想敲死自己,应该不用纠结,在编辑器debug跑一遍,问题就暴露出来了)。
4.解决问题
先使用单测,跑了一遍对应的方法,发现确实没有问题,所以怀疑,是因为MOCK掉的DAO方法,抛了一个异常,然后没有显式的抛出来,所以就手动debug启动了下应用,就是POSTMAN测试,果然,报错如下:
nested exception is org.apache.ibatis.binding.BindingException: Parameter 'array' not found. Available parameters are [collection, list]
这里是因为,在mybaits传集合参数,进行循环时,一定要指定集合类型,目前mybaits对List集合和Array集合,是不同,需要在循环时指定对应的集合,如果使用类似于Long[] 等进行传参时,一定要指定collection=”array”,如果使用List进行传参时,需要指定collection=”list”,否则就会抛异常。
至于为什么在服务器上没有抛异常出来,很可能是被框架给吃掉了,需要进一步排查。