post方式传递多个对象记录(不推荐)

本文介绍了在处理前端POST请求传递多个对象时遇到的问题及解决方法。通过一个背景故事,作者阐述了需要同时处理一个对象和一个列表对象的需求。在尝试使用多个@RequestBody时,作者找到了正确的姿势,并详细描述了Controller层的实现。在实现层,作者提醒注意数据库操作的正确位置,以及将JSONObject转换为JavaBean的技巧。最后,作者总结经验,建议将多个对象整合到一个Map对象中以简化代码。

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,这样的话我之后的代码实现就会方便很多。这次的教训真的太惨痛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值