Java-Debug记录11-20条

1. cannot deserialize instance of java.util.arraylist<java.lang.object> out of start_object token

事实上,这个问题一般出在想偷懒完成以下映射的时候:

  • 前端ajax通过post/put请求,在请求体json中塞入List列表如下:
{ids: ["id1",...,"idn"]}
  • 后端controller图简便,不想声明一个对象来接收,而是想其自动拆包成ids -- List<String>使用:
@PutMapping
    public Results updateEntity( @RequestBody List<String> ids) {

问题产生的原因在于,Jackson并不能像我们想的一样自动拆包json成为ids -- List<String>,而是将该json对象处理为一个Mapids作为key,List<String>作为value。所以,要想通过传json的方式来接收,后端的RequestBody就必须是Map<>格式:

@PutMapping
    public Results updateEntity( @RequestBody Map<String,List<String>> ids) {

当然,直接使用List<String>也有办法,那就是避开传整个json字符串的方式,而是采用传List列表,即ajax请求改为如下格式:

$axios({
    url: `/dish/status/${params.status}`,
    method: 'put',
    data: params.id //json则是:{ids: params.id}
  })

还有一个类似的错误,显示是out of VALUE_NUMBER_INT token,这是由于params.id在只有一个成员时,并未处理为List,而是当成了字符串,后端映射时使用List<String>> 来转换就会报上述错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值