应业务需求,需要使用到MQ进行数据上传和下发。传递格式为JSON,服务那边下发JSON数组,接收端将JSON数组转换成List集合,调用Mybatis-plus批量添加saveBatch()。提示字段未找到...
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.apache.ibatis.binding.BindingException: Parameter '字段' not found. Available parameters are [collection, list]
### The error may exist in com/vinsuan/parking/client/dao/mapper/ParkingLongrentInfoTimeMapper.java (best guess)
### The error may involve com.vinsuan.parking.client.dao.mapper.ParkingLongrentInfoTimeMapper.insert
### The error occurred while executing an update
### Cause: org.apache.ibatis.binding.BindingException: Parameter '字段' not found. Available parameters are [collection, list]at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:200)at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.saveBatch(ServiceImpl.java:122)at com.baomidou.mybatisplus.extension.service.IService.saveBatch(IService.java:58)at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)at com.vinsuan.parking.client.service.impl.ParkingLongrentInfoTimeServiceImpl$$EnhancerBySpringCGLIB$$f890ae1b.saveBatch(<generated>)at com.vinsuan.parking.client.datahandler.mqtt.MqttHandler.handlerDataToMethod(MqttHandler.java:259)at com.vinsuan.parking.client.datahandler.mqtt.MqttHandler.handlerData(MqttHandler.java:239)at com.vinsuan.parking.client.datahandler.mqtt.MqttHandler.messageArrived(MqttHandler.java:84)at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:499)at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:402)at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:206)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)at java.util.concurrent.FutureTask.run(FutureTask.java)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.ibatis.binding.BindingException: Parameter '字段' not found. Available parameters are [collection, list]at org.apache.ibatis.session.defaults.DefaultSqlSession$StrictMap.get(DefaultSqlSession.java:343)at org.apache.ibatis.scripting.xmltags.DynamicContext$ContextAccessor.getProperty(DynamicContext.java:113)at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2719)at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:114)at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:493)at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:457)at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:41)at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:293)at org.apache.ibatis.executor.statement.BaseStatementHandler.<init>(BaseStatementHandler.java:64)at org.apache.ibatis.executor.statement.PreparedStatementHandler.<init>(PreparedStatementHandler.java:41)at org.apache.ibatis.executor.statement.RoutingStatementHandler.<init>(RoutingStatementHandler.java:46)at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:563)at org.apache.ibatis.executor.BatchExecutor.doUpdate(BatchExecutor.java:57)at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
原因:使用hutool工具类将JSON数组转换成List集合,发现有两层集合。
<!-- hutool 版本:4.5.0 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.5.0</version></dependency>
/*** 测试 JSON数组转换成List集合* @param args*/public static void main(String[] args) {String data = "[{\"id\":1,\"username\":\"username\",\"password\":\"password\"},{\"id\":2,\"username\":\"username2\"}]";List<Object> list = JSONUtil.toList(JSONUtil.parseArray(data), Object.class);System.out.println(list);}-------------控制台打印-------------[[{"password":"password","id":1,"username":"username"}, {"id":2,"username":"username2"}]]
解决方案:
方案一、 将JSON数组字符串转换为JSON数组,循环遍历存储List集合中。
方案二、 将hutool 版本:4.5.0 改为 4.6.15。