根据JSON请求报文实现批量数据新增或修改业务逻辑——控制层保存用户数据接口实现

3 篇文章 0 订阅

对于以下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("操作成功");
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C#实现HTTP POST请求,设置Header并获取JSON数据保存到MySQL数据库的示例代码: ```csharp using System; using System.Net; using System.IO; using System.Text; using MySql.Data.MySqlClient; using Newtonsoft.Json; namespace HttpPostExample { class Program { static void Main(string[] args) { // 设置POST请求的URL地址 string url = "https://example.com/api/data"; // 设置POST请求的Header WebRequest request = WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json"; request.Headers["Authorization"] = "Bearer your_access_token_here"; // 构造POST请求JSON数据 string postData = JsonConvert.SerializeObject(new { name = "John", age = 30 }); // 将JSON数据写入请求流中 byte[] byteArray = Encoding.UTF8.GetBytes(postData); request.ContentLength = byteArray.Length; Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); // 发送POST请求并获取响应 WebResponse response = request.GetResponse(); dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); // 关闭流 reader.Close(); dataStream.Close(); response.Close(); // 解析JSON数据保存到MySQL数据库 dynamic data = JsonConvert.DeserializeObject(responseFromServer); string connectionString = "server=localhost;database=mydatabase;uid=myusername;password=mypassword;"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { connection.Open(); MySqlCommand command = connection.CreateCommand(); command.CommandText = "INSERT INTO mytable (name, age) VALUES (@name, @age)"; command.Parameters.AddWithValue("@name", data.name); command.Parameters.AddWithValue("@age", data.age); command.ExecuteNonQuery(); connection.Close(); } Console.WriteLine("Data saved to database successfully."); } } } ``` 在上面的示例代码中,我们首先设置POST请求的URL地址和Header,然后构造POST请求JSON数据并将其写入请求流中。接下来,我们发送POST请求并获取响应,并将响应的JSON数据解析并保存到MySQL数据库中。最后,我们输出一条消息表示数据已成功保存数据库中。 请注意,示例代码中使用了Json.NET库来处理JSON数据。如果您没有安装此库,请使用NuGet包管理器安装它。您还需要将MySQL.Data.dll添加到您的项目引用中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值