一、思路
其实增删改查每次都是调用接口,那我们将手动去调用这个接口改为数据多少条数据,那就调用多少次接口,不就很方便了吗?
既然是多次调用,那我们就可以通过循环去发送http请求来调用我们接口,不就能做到批量的增删改查了吗?
这里我以批量查寻对应数据和删除为例子:这两个我们都可以通过ID来作为查询条件进行操作,而ID批量这样子放入,1,2,3,4 或者这样子 1 2 3 4 发现规律了吗?他们都是有分隔符号,那么就可以把分隔符号去掉,然后一个一个的装入数组中,这样子就把要批量操作的数据收集起来了。我们接下来就可以用循环根据数组的个数来进行循环的次数,循环里面写好http请求的配置,然后每次发送的查询的ID就是从数组里面拿出来,作为条件去发送http请求。
二、代码
package com.ruoyi.course.controller;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
public class BatchHttpRequestSender {
//发送地址
private static final String BASE_URL = "http://127.0.0.1:1111/mes/pro/workorder/end/";
//token
private static String token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6Ijk1YzMxMWEyLTU5NDUtNDg1Yy1hYzc5LTc2NTU0NTM4YTNiNSJ9.2SO70ZZ-JfWxhn0x3i6xPAuGsVoWPjdYR1lTBYWPwlyEW44GiZOPu2Cridm_ja9beJAe0JSuii1ATJ_3D77KGw";
//匹配拆分规则,一般不要动!!!!!!!
private static final String[] possibleSeparators = {" ", "\n", "\t", "\r", " ,", "、", ","};
public static void main(String[] args) {
//可以将内容粘贴到input变量,也可以让内容直接输入到控制台中
String input = "";
//运行发送批量请求
runBatchHttpRequestSend(input);
}
public static void runBatchHttpRequestSend(String input){
//也可以不输入直接粘贴到控制台中
String[] numberArray = null;
if (input == null || input.isEmpty()) {
Scanner scanner = new Scanner(System.in); // 创建一个Scanner对象,用于读取用户输入
List<String> inputLines = new ArrayList<>(); // 创建一个列表来存储所有输入行
System.out.println("粘贴进来,换行后输入'exit'按回车结束:"); // 提示用户输入多行
while (true) { // 开始一个无限循环
String inputAuto = scanner.nextLine(); // 读取一行输入
// 检查输入是否为退出关键字
if (inputAuto.equalsIgnoreCase("exit")) {
break; // 如果是,则退出循环
}
inputLines.add(inputAuto); // 如果不是,则将输入添加到列表中
}
// 输出所有输入的字符串
numberArray = inputLines.toArray(new String[0]); // 将列表转换为String数组
System.out.println("您输入的所有字符串是:");
for (String line : numberArray) {
System.out.println(line);
}
scanner.close(); // 关闭Scanner对象
} else {
//将字符串转为数组
numberArray = printNumbers(input);
}
for (String number : numberArray) {
//发送请求
sendHttpRequest(number, token);
}
System.out.println("完成");
}
//将字符串转为数组
public static String[] printNumbers(String input) {
//非空判断
if (input == null || input.isEmpty()) {
return new String[]{};
}
//判断规则
String splitChar = detectSeparator(input);
//如果未找到分隔符,则返回一个空数组
if (splitChar.equals("error")) {
System.out.println("未找到分隔符");
return new String[]{};
}
// 将输入的字符串按空格分隔成为数组
String[] numberArray = input.split(splitChar);
// 将数组转换为列表以便于遍历
ArrayList<String> numberList = new ArrayList<>(Arrays.asList(numberArray));
System.out.println("in (");
// 遍历并输出每个元素
for (String number : numberList) {
System.out.println(number + ",");
}
System.out.println(")");
System.out.println();
System.out.println("总数据量:" + numberList.size());
return numberArray;
}
//判断采用的分隔符方法
public static String detectSeparator(String input) {
// 常见的分隔符列表及其计数器
Map<String, Integer> separatorCounts = new HashMap<>();
for (String separator : possibleSeparators) {
separatorCounts.put(separator, 0);
}
// 遍历输入字符串的每个字符
for (char c : input.toCharArray()) {
if (separatorCounts.containsKey(String.valueOf(c))) {
int count = separatorCounts.get(String.valueOf(c));
count++; // 增加计数
separatorCounts.put(String.valueOf(c), count);
if (count >= 5) { // 如果计数达到5,则返回该分隔符
return String.valueOf(c);
}
}
}
// 如果没有找到计数达到5的分隔符,则返回一个特殊字符或空字符
return "error"; // 或者你可以抛出异常,表示未找到满足条件的分隔符
}
private static void sendHttpRequest(String workOrderId, String token) { // 添加了token参数
try {
URL url = new URL(BASE_URL + workOrderId);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// 添加验证token的请求头
connection.setRequestProperty("Authorization", "Bearer " + token); // 设置请求头
// 获取响应码
int responseCode = connection.getResponseCode();
System.out.println("Response Code for Work Order ID " + workOrderId + ": " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
// 读取响应内容
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 输出响应内容
System.out.println("Response for Work Order ID " + workOrderId + ": " + response.toString());
} else {
System.out.println("GET request not worked for Work Order ID " + workOrderId);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}