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 在开头,真系日了狗,折腾了我两天.