对于以下JSON请求报文,如何实现数据保存接口?
业务需求:
1、请求类型:post
2、逻辑上需要自己判断用户数据是新增还是修改,并保存数据
3、批量维护请放在同一个事务中,新增修改如果一个错误,全部回滚
JSON请求报文如下:
{
"requestTime":"2020-12-08 16:21:14",
"data": [{
"uId": "001",
"uName": "张三",
"objs": [{
"objId": 101,
"isMain": "y"
}, {
"objId": 102,
"isMain": "n"
}]
}, {
"uId": "002",
"uName": "李四",
"objs": [{
"objId": 102,
"isMain": "y"
}, {
"objId": 103,
"isMain": "n"
}]
}]
}
uId:用户Id(唯一标识码)
uName:用户名字
objs:学科列表
objId:学科Id
isMain:是否主修(y:主修n:辅修)
Controller控制层实现业务逻辑——如何接收JSON请求报文
核心代码
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.ObjectUtils;
@Autowired
private UserInfoService userInfoService;
@Autowired
private ObjInfoService objInfoService;
@Autowired
private UserObjService userObjService;
@PostMapping("/saveUsers")
public AjaxResult saveUsers(@RequestBody JSONObject jsonObject) {
JSONArray array = jsonObject.getJSONArray("data");
for (int i = 0; i < array.size(); i++) {
UserInfo userInfo = new UserInfo();
String uId = array.getJSONObject(i).getString("uId");
// 保存用户Id
userInfo.setUId(uId);
// 保存用户名字
userInfo.setUName(array.getJSONObject(i).getString("uName"));
// 物理主键id(表自增id)
String id = userInfoService.selectUserIdByUId(uId);
// New用户与学科关系表
UserObj userObj = new UserObj();
// 判断用户数据是否已存在
if (……) {
// 如果存在,修改用户信息
// 先删除用户与学科关系表数据再添加
……
} else {
// 如果不存在,新增用户信息
// 在新增用户数据后才能获取到新增的用户表物理主键id(表自增id)--注意xml文件写法
……
}
// 保存用户表主键id到用户与学科关系表
// 新增用户与学科关系表
// 如果学科列表存在
……
if (array.getJSONObject(i).getJSONArray("objs") != null) {
JSONArray objArray = array.getJSONObject(i).getJSONArray("objs");
for (int j = 0; j < objArray.size(); j++) {
UserObj userObj = new UserObj();
String objId = objArray.getJSONObject(j).getString("objId");
// 判断学科Id是否存在
……
if (ObjectUtils.isEmpty(oId)) {
return AjaxResult.error("操作失败:学科Id"+objId+"不存在");
}else{
userObj.setOrgUid(objId);
if ("y".equals(objArray.getJSONObject(j).getString("isMain"))) {
// 先删除主学科关系再添加
……
userObj.setIsMain(1);
// 新增用户表中的学科Id
……
} else if ("n".equals(objArray.getJSONObject(j).getString("isMain"))){
userObj.setIsMain(0);
}
// 新增用户与学科关系表的用户Id
// 新增用户与学科关系表
……
}
}
}
}
return AjaxResult.success("操作成功");
}