1、HTTP POST工具类:
public class HttpClientUtil { public static String sendPostRequest(String url, String jsonBody) throws IOException { // 创建 HttpClient CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建 HttpPost 对象 HttpPost httpPost = new HttpPost(url); // 设置请求头 httpPost.setHeader("Content-Type", "application/json"); System.out.println(jsonBody); // 设置请求体 StringEntity stringEntity = new StringEntity(jsonBody,"utf-8"); httpPost.setEntity(stringEntity); System.out.println("Request Body: " + EntityUtils.toString(httpPost.getEntity())); // 执行请求 try (CloseableHttpResponse response = httpClient.execute(httpPost)) { return EntityUtils.toString(response.getEntity()); // 处理响应 } }
网上有关HTTP POST的工具类代码比较多,这边就随便选取了一个。
2、推送数据接口:
@PostMapping("/anline") public JsonData SelectAnline(Mes_anlineDAO mes_anlineDAO) { try { //从数据库中获取最新一条数据 List<Mes_anlineDAO> selectAnline = selectMesAnlineService.SelectAnline(mes_anlineDAO); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String addtime = sdf1.format(new Date()); System.out.println(addtime); //将list转换为字典形式的数据 List<Map<String, Object>> mapList = selectAnline.stream().map(obj -> { Map<String, Object> map = new HashMap<>(); map.put("cID", obj.getCID()); map.put("anlineID", obj.getAnlineID()); map.put("anlineName", obj.getAnlineName()); map.put("anlineCode", obj.getAnlineCode()); map.put("anlineDfinish",obj.getAnlinDfinish()); map.put("anlineRuntime", obj.getAnlinRuntime()); map.put("anlineDate", addtime); return map; }).collect(Collectors.toList()); // 输出转换后的结果 System.out.println("转换后的数据:"+mapList); //将字典存储到Map集合中 Map<String, Object> resultMap = new HashMap<>(); resultMap.put("mapList", mapList); //将整个数据全部转换为json格式 Gson gson = new Gson(); String jsonStr = gson.toJson(resultMap); //打印转换后的json数据 System.out.println(jsonStr); //进行httpPost请求的发送 String url = "目标地址"; String response = HttpClientUtil.sendPostRequest(url,jsonStr); System.out.println("Response: " + response); if (response != null && !response.isEmpty()) { // 解析JSON响应 JsonObject jsonResponse = JsonParser.parseString(response).getAsJsonObject(); // 假设服务器返回的响应中有一个字段叫做 "code" 用来表示成功或失败 String code = jsonResponse.get("code").getAsString(); // 检查状态码,根据实际情况调整 if ("200".equals(code)) { // 假设 200 代表成功 return JsonData.buildSuccess("success"); } else { return JsonData.buildError("Operation failed with code: " + code); } } else { System.out.println("No response received."); return JsonData.buildError("Failed to receive response"); } } catch (IOException e) { // 异常处理,返回失败的 JsonData e.printStackTrace(); return JsonData.buildError("Failed to send POST request"); } }
一定要按照相关文档的JSON格式去设置发送的JSON数据格式,不然数据发送了,对方也会拒绝接受!
3、数据接收:
@PostMapping(value = "/plan") public JsonData SelectPlan(@RequestBody List<PlanDAO> planList) { // 处理接收到的List集合数据 try { // 验证输入数据 if (planList == null || planList.isEmpty()) { return new JsonData(false, "失败", "500", null); } // 处理接收到的List集合数据 for (PlanDAO PlanDAO : planList) { // 保存到数据库 根据自身需求自行编写相关接口 } // 所有数据处理完毕,返回成功响应 return new JsonData(true, "成功", "200", null); } catch (Exception e) { // 日志记录异常,返回错误响应 e.printStackTrace(); // 在生产环境中,你应该使用日志框架来记录这些信息 return new JsonData(false, "失败", "500", null); } }
至此,一个完整的HTTP POST请求的推送、接受数据就大功告成!如有错误,欢迎指正!
一个正在努力挣扎的咸鱼!