post方式传递多个对象记录
1.背景
最近前端提个需求,在a表中增加一条数据,找到对应的id,拿到此id新增几条另一b表数据,这就涉及到前端传来一个对象和一个list对象。这就是我脑海中的反应。这就是直接导致我的后续问题。
2.多个@RequestBody的正确姿势
感谢 明明如月小角落的博文正确姿势,我一下子就搜到这个,就被带过去了。
最后我的传递body格式是:
{
"api":{
"cfgId": 321,
"name": "321",
"uri": "321",
"method": "321",
"headerJson": null,
"action": null,
"payload": null,
"paramJson": null,
"responseJson": null,
"resKeyBody": null,
"resType": null,
"resKeyId": null,
"resKeyName": null,
"resKeyLabel": null,
"resKeyVal": null,
"res_type": null,
"enable": null
},
"list_point":[{
"name": "123",
"apiKey": "123",
"label": "123",
"mock": null,
"mockJson": null,
"expressJson": null,
"apiGroupId": null
},{
"name": "124",
"apiKey": "124",
"label": "124",
"mock": null,
"mockJson": null,
"expressJson": null,
"apiGroupId": null
}]
}
在controller中是这么写的
public <T> ResultApiVO<List<T>> withPoints(@MultiRequestBody("api") CfgApiAddRequestVO cfgApiAddRequestVO,
@MultiRequestBody("list_point") List<JSONObject> cfgPointAddRequestVO) {
List<T> list = cfgApiService.withPoints(cfgApiAddRequestVO,cfgPointAddRequestVO);
return ResultVOUtil.successApi(list.get(0),list.subList(1,list.size()));
}
3.实现层注意的地方
在实现层被两个地方卡住了
第一个,对数据库的操作放在for循环语句中要注意。刚开始发现新增的字段的id都是同一个,只能录入一条数据。幸亏jpa有Iterable这个参数的save方法,把要新增的列变成list,list转换成Iterable。在这个其中,Iterable这个接口中的类,是有条件,要注意。
第二个,是第二个list对象中是JSONObject参数,不是自认为放的javaBean类。
CfgPointAddRequestVO cfgPointAddRequestVO1=JSONObject.toJavaObject(cfgPointAddRequestVO.get(i), CfgPointAddRequestVO.class);
用这个方法再把JSONObject转换成javaBean类。
4.总结
其实完全可以没必要这么绕大圈子,首先有几个对象就应该考虑合成一个对象,此处就是直接map,这样的话我之后的代码实现就会方便很多。这次的教训真的太惨痛。
本文介绍了在处理前端POST请求传递多个对象时遇到的问题及解决方法。通过一个背景故事,作者阐述了需要同时处理一个对象和一个列表对象的需求。在尝试使用多个@RequestBody时,作者找到了正确的姿势,并详细描述了Controller层的实现。在实现层,作者提醒注意数据库操作的正确位置,以及将JSONObject转换为JavaBean的技巧。最后,作者总结经验,建议将多个对象整合到一个Map对象中以简化代码。
&spm=1001.2101.3001.5002&articleId=88949581&d=1&t=3&u=d836a4cbff2644b39ab12201f98c0328)
1400

被折叠的 条评论
为什么被折叠?



