记录一次JSONObject导致迷茫的问题
原创
©著作权归作者所有:来自51CTO博客作者纪先生笔记的原创作品,请联系作者获取转载授权,否则将追究法律责任
很简单的一个接口,写的时候很自信。都不带测试的,直接部署让前端使用,结果打脸了,而且还是一脸懵逼的错误。
哪怕你是老油条,开发的接口再简单也要自己测试一下 再交给前端或者测试,不然容易打脸,挺疼的
下面简单描述下
以前的接口都是使用对象或者单字段接受参数,这次接口比较单一,懒得建对象了,就直接使用JSONObject接收了,上代码
接口和数据如下
接口和数据都很正常 ,完全没有问题。
开始调用接口测试
什么情况啊,在41行出现强转失败的错误,只是把Object对象转成JSONObject,但是我代码里都没有LinkedHashMap,为什么会有这种错误呢。
打印下他的类型发现就是LinkedHashMap
确定最终原因:在controller中使用JSONObject接收数据的时候会把集合解析成LinkedHashMap
所以不能使用JSONObject强转,否则就会出现类型转换的错误,一般我们都是使用具体的对象接收参数,遇不到这种问题。
解决问题:
- 可以使用String接收,然后再转成JSONObject
@ApiOperation("测试数据")
@PostMapping
public static ResponseEntity insertData(@RequestBody String data){
JSONArray jsonArray = JSONObject.parseObject(data).getJSONArray("body");
for (Object object :jsonArray){
JSONObject jsonObject = (JSONObject)object;
}
return Results.success();
}
- 使用JSON.toJSON
@ApiOperation("测试数据")
@PostMapping
public static ResponseEntity insertData(@RequestBody JSONObject data){
JSONArray jsonArray = data.getJSONArray("body");
for (Object object :jsonArray){
JSONObject jsonObject = (JSONObject)JSON.toJSON(object);
}
return Results.success();
}
- 使用ObjectMapper
@ApiOperation("测试数据")
@PostMapping
public static ResponseEntity insertData(@RequestBody JSONObject data){
ObjectMapper objectMapper = new ObjectMapper();
JSONArray jsonArray = data.getJSONArray("body");
for (Object object :jsonArray){
JSONObject jsonObject1 = objectMapper.convertValue(data,JSONObject.class);
}
return Results.success();
}
我是纪先生,用输出倒逼输入而持续学习,持续分享技术系列文章,以及全网值得收藏好文,欢迎关