这不是你想象中的:Can not deserialize instance of java.util.ArrayList out of START_OBJECT token

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token

大概意思就是说类型转换有问题,前端传来的数据不能转换成我接收的格式.

我第一时间先检查自己的接口,也对比了其他人的类似的接口,一样的写法,奇了怪?

 @ApiOperation(value = "保存", httpMethod = "POST")
    @RequestMapping(value ="/save",method = RequestMethod.POST)
    @ResponseBody
    public Result<String> saveTarget(
            @ApiParam("保存") @RequestBody List<TestDTO> testDTOS) {
       
        xxxService.save(testDTOS);
        return buildSuccessResult("保存成功", null);

    }

我 debug 看看,好吧,在入参的时候就报错了, swagger 接口调试莫名其妙多了一对双引号?

没办法,得面向 Goolge 编程了,搜索到这篇博客,这位老大哥说:

我又找前端相互排除格式问题,无果,想不通,为什么别人得接口可以而我的不行?

 

折腾了一整上午,只好求助大佬

最后大佬用 IDEA 带的 RestfulClient 帮我排除了,我的接口时没问题的,初步推测 swagger 版本的问题

 

然而事情还没有结束,前端说我都是按着 json 格式传你的,你看别的接口也是这样,又扯皮了几个小时,转而去求助另一个大佬.

他看 swagger 转换格式老是有问题,于是就用 Windows 自带的命令提示符操作

把上述的 Curl 复制粘贴文本编辑器调整一下格式

curl -X POST --header "Content-Type: application/json"  --header "Cookie: tracknick=admin; Souche-Security-Token=ZZZ1568006A_493c3f9589b3195316c7b419c252f4f2; _security_token=ZZZ1568006A_493c3f9589b3195316c7b419c123f4f2" --header "Accept: application/json" -d [{}] "http://local.xxx:8086/xxxAction/save"

 

再复制到 命名窗口,有意思的事情发生了,没有报错误!!!

问题进一步锁定,是前端传多了一个 body!

body:[{
    "age": 18,
    "sex": 0,
    "updatorId": "string"
  }]

 

正常前端传过来的格式是这样的:

[{
    "age": 18,
    "sex": 0,
    "updatorId": "string"
  }]

 

害,多了一个 body 在开头,真系日了狗,折腾了我两天.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值