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”, 否则就会抛异常。
至于为什么在服务器上没有抛异常出来,很可能是被框架给吃掉了,需要进一步排查。