Type definition error: [array type, component type: [simple type, class java.lang.String]]; nested e

 详细报错信息:

Type definition error: [array type, component type: [simple type, class java.lang.String]]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.lang.String[]`: no String-argument constructor/factory method to deserialize from String value ('1a6e48733e069f67f52bca67b861f234')

页面报错截图:

其实这里可以参考删除/批量删除业务,

删除            传id

批量删除     传id数组

前端对删除和批量删除按钮是用的同一个方法,只是入参可以接受单条和数组而已:

若依框架已经都处理好了这套流程:

这里虽然业务如同删除/批量删除一样,但这里不能像删除功能那样直接传id/ids所以后端用一个对象XXXForm来接参,在里面定义:这三个参数:

/** 发货标题 */String fahuo;

/** 备注 */  String remark;

/** 业务IDs */   String [] ids;    //注意这里用的数组来接收批量操作的业务id

控制器: 

然后前端的data里面定义表单参数:

show方法和提交按钮如下,这里进页面时就先走reset方法重置表单,然后把获取的ids取出来,给响应式变量里的数据ids:[]赋值

 然后在提交时用data就收刚刚的入参,再调下发方法把data丢进去,调后端接口

然后这里批量执行没有问题,后端正常接收到数组,Arrays.asList把String [] ids转List后updateBatchById(ldList)查询,list.stream().forEach校验domain合法性后改字段状态、赋值,然后一股脑丢给updateBatchById就完了后端非常简单;

但执行单条操作时报错了,如下

Type definition error: [array type, component type: [simple type, class java.lang.String]]; nested exception is com.xxx.xxx.xxx.xxxException: Cannot construct instance of `java.lang.String[]`: no String-argument constructor/factory method to deserialize from String 

大致意思是`java.lang.String[]`: 要转为String类型的 value ,  发生了异常,所以这里去打印一下单选和批量的按钮,传给后端的id/ids类型到底是啥

这里可以看到,批量传的是数组打印出类型是object而单条是string,所以这里有两点注意:

1.要么不能像delete那样id和ids混着传,因为后端在对象里面的属性是固定的一种类型

2.要么统一传id或ids,在后端进行处理

这里可以传ids数组到后端,单选时一个字符串就创建数组丢进去,后端依旧用数组接收

也可以直接传,后端对象接参时把属性设置为String即可

然后用split(",")获取对象的数组再Arrays.asList(ids)即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值