package com.fr.data; import com.fr.stable.ParameterProvider; import com.fr.third.fasterxml.jackson.databind.ObjectMapper; import okhttp3.*; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 带参数的程序数据集Demo 跟ParamTableDataDemo功能一样,但实现更简单 * * @author fanruan */ public class el_api20 extends SimpleTableData { @Override public String[] initColumnNames() { String[] columnNames = {"URL"}; return columnNames; } @Override public List loadData() { List resultList = new ArrayList<>(); try { // 验证参数列表不为空 if (parameters == null || parameters.get() == null || parameters.get().size() < 5) { String errorMsg = "参数不足,需要至少5个参数"; System.err.println(errorMsg); resultList.add(new Object[]{errorMsg}); return resultList; } // 获取参数并进行空值检查 String Line = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString(); String WorkShopName = ((ParameterProvider) (parameters.get().toArray())[1]).getValue().toString(); String dateStrStart = ((ParameterProvider) (parameters.get().toArray())[2]).getValue().toString(); String dateStrEnd = ((ParameterProvider) (parameters.get().toArray())[3]).getValue().toString(); String elCode = ((ParameterProvider) (parameters.get().toArray())[4]).getValue().toString(); // 检查关键参数是否为空 if (Line == null || WorkShopName == null || dateStrStart == null || dateStrEnd == null) { String errorMsg = "关键参数不能为空"; System.err.println(errorMsg); resultList.add(new Object[]{errorMsg}); return resultList; } OkHttpClient client = new OkHttpClient().newBuilder().build(); MediaType mediaType = MediaType.parse("application/json"); // 构建请求体 String jsonBody = String.format( "{\n\"Line\": \"%s\",\n\"WorkShopName\": \"%s\",\n\"dateStrStart\": \"%s\",\n\"dateStrEnd\": \"%s\",\n\"elCode\": \"%s\"\n}", Line, WorkShopName, dateStrStart, dateStrEnd, elCode ); System.out.println("发送请求到: http://127.0.0.1:8080/GetCodeImg, 请求体: " + jsonBody); RequestBody body = RequestBody.create(mediaType, jsonBody); Request request = new Request.Builder() .url("http://127.0.0.1:8080/GetCodeImg") .method("POST", body) .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute(); System.out.println("请求响应状态码: " + response.code()); // 处理响应 if (response.isSuccessful() && response.body() != null) { String responseBody = response.body().string(); ObjectMapper objectMapper = new ObjectMapper(); // 将 JSON 数组解析为 String 数组 String[] urlArray = objectMapper.readValue(responseBody, String[].class); // 遍历数组,为每个元素创建一个单元素数组并添加到列表中 for (String url : urlArray) { // 每个数组中只放一条数据 resultList.add(new Object[]{url}); } } else { String errorMsg = "请求失败,状态码: " + response.code(); if (response.body() != null) { String errorBody = response.body().string(); errorMsg += ", 错误内容: " + errorBody; System.err.println(errorMsg); } else { System.err.println(errorMsg); } resultList.add(new Object[]{errorMsg}); } } catch (IOException e) { String errorMsg = "网络请求发生异常"; System.err.println(errorMsg); e.printStackTrace(); // 打印完整堆栈跟踪 resultList.add(new Object[]{errorMsg + ": " + e.getMessage()}); throw new RuntimeException(errorMsg, e); } catch (Exception e) { String errorMsg = "处理数据时发生意外异常"; System.err.println(errorMsg); e.printStackTrace(); // 打印完整堆栈跟踪 resultList.add(new Object[]{errorMsg + ": " + e.getMessage()}); throw new RuntimeException(errorMsg, e); } return resultList; } }