前言
最近需要提取一个Json的数据放到数据库,配合定时任务
需要用到的相关知识推荐阅读:
1. 基本知识
HttpURLConnection 是 Java 提供的用于发送 HTTP 请求的类
它的作用是建立与服务器的连接,发送 HTTP 请求并获取服务器的响应,HttpURLConnection 是 Java 标准库中的一部分,用于实现 HTTP 协议的客户端
作用:
- 建立与服务器的连接
- 发送 HTTP 请求并获取服务器的响应
- 支持 GET、POST、PUT、DELETE 等 HTTP 请求方法
- 提供了一系列方法,用于设置请求头、写入请求体、获取响应码、获取响应体等操作
常用的 API 接口:
-
openConnection()
: 打开连接,返回一个 HttpURLConnection 对象 -
setRequestMethod(String method)
: 设置请求方法,如 GET、POST 等 -
setRequestProperty(String key, String value)
: 设置请求头字段 -
connect()
: 建立与服务器的连接 -
getInputStream()
: 获取响应输入流,用于读取服务器响应数据 -
getResponseCode()
: 获取响应码,如 200、404 等 -
getHeaderField(String name)
: 获取指定请求头字段的值 -
getHeaderFields()
: 获取所有响应头字段及其值 -
接口参数说明:
-
URL:要请求的目标 URL
-
method:请求方法,常见的有 GET、POST、PUT、DELETE
-
请求头字段:如 Content-Type、User-Agent 等,用于设置请求的元数据
-
请求体:对于 POST、PUT 等方法,请求体用于发送数据到服务器
-
响应码:服务器对请求的响应状态码,如 200 表示成功,404 表示未找到资源等
-
响应体:服务器返回的实际数据,可以是 HTML、JSON、XML 等格式的文档
2. Demo
此处的接口数据为get请求,Json数据如下:
对应的Java代码如下:
package com.example.test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class Demo{
public static void main(String[] args) {
try {
// 构建请求参数
String equipmentNo = "RC22";
String[] dataNums = {"55", "57", "59", "66"};
// 构建 URL
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append("http://127.0.0.1/xxx/yyy?");
for (String dataNum : dataNums) {
urlBuilder.append("dataNums=").append(dataNum).append("&");
}
urlBuilder.append("equipmentNo=").append(equipmentNo);
URL url = new URL(urlBuilder.toString());
// 创建连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
// 获取响应
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 将响应转换为 JSON 对象
JSONObject jsonObject = JSONObject.parseObject(response.toString());
// 提取参数值
String equipmentNoResult = jsonObject.getString("equipmentNo");
String dataTime = jsonObject.getString("data_time");
JSONArray dataArray = jsonObject.getJSONArray("data");
for (int i = 0; i < dataArray.size(); i++) {
JSONObject dataObject = dataArray.getJSONObject(i);
String dataName = dataObject.getString("data_name");
String unit = dataObject.getString("unit");
int dataNum = dataObject.getIntValue("data_num");
int value = dataObject.getIntValue("value");
// 打印参数值
System.out.println("Data Name: " + dataName);
System.out.println("Unit: " + unit);
System.out.println("Data Number: " + dataNum);
System.out.println("Value: " + value);
System.out.println("--------------------------");
}
} else {
System.out.println("GET 请求失败,响应码: " + responseCode);
}
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
通过上述请求可以发现:(此处为数据的抽取)
- 将响应转换为 JSON 对象:
JSONObject jsonObject = JSONObject.parseObject(response.toString());
- 提取参数值:
jsonObject.getString
- 提取内部data的参数值:
jsonObject.getJSONArray("data");
3. 工具类
以下是对UrlConnectionUtils类中方法的详细注释:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class UrlConnectionUtils {
/**
* 发送 GET 请求并获取响应数据
*
* @param url 目标 URL
* @return 响应数据字符串
*/
public static String sendGetRequest(String url) {
try {
// 创建 URL 对象
URL targetUrl = new URL(url);
// 打开 HTTP 连接
HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection();
// 设置请求方法为 GET
connection.setRequestMethod("GET");
StringBuilder response = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line;
// 读取响应数据
while ((line = reader.readLine()) != null) {
response.append(line);
}
} finally {
// 关闭连接
connection.disconnect();
}
return response.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 发送 POST 请求并获取响应数据
*
* @param url 目标 URL
* @param requestBody 请求体数据字符串
* @return 响应数据字符串
*/
public static String sendPostRequest(String url, String requestBody) {
try {
// 创建 URL 对象
URL targetUrl = new URL(url);
// 打开 HTTP 连接
HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection();
// 设置请求方法为 POST
connection.setRequestMethod("POST");
// 允许向服务器发送数据
connection.setDoOutput(true);
try (OutputStream outputStream = connection.getOutputStream()) {
// 发送请求体数据
outputStream.write(requestBody.getBytes());
outputStream.flush();
}
StringBuilder response = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line;
// 读取响应数据
while ((line = reader.readLine()) != null) {
response.append(line);
}
} finally {
// 关闭连接
connection.disconnect();
}
return response.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 发送 JSON 格式的 POST 请求并获取响应数据
*
* @param stringurl 目标 URL
* @param requestParameter JSON 格式的请求参数字符串
* @return 响应数据字符串
*/
public static String sendJsonRequest(String stringurl, String requestParameter) {
try {
// 创建 URL 对象
URL url = new URL(stringurl);
// 打开 HTTP 连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方法为 POST
conn.setRequestMethod("POST");
// 设置请求头部为 JSON 格式
conn.setRequestProperty("Content-Type", "application/json");
// 允许向服务器发送数据
conn.setDoOutput(true);
// 向服务器发送 JSON 数据
OutputStream outputStream = conn.getOutputStream();
outputStream.write(requestParameter.getBytes());
outputStream.flush();
// 获取响应结果
int responseCode = conn.getResponseCode();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuffer response = new StringBuffer();
// 读取响应数据
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
return response.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
通过上述工具类,可以使用post请求:
个别参数截图如下:
// 创建params对象
Map<String, Object> param = new HashMap<>();
param.put("triggerids", "xxx");
param.put("output", "yyy");
// 创建整个JSON对象
Map<String, Object> json = new HashMap<>();
json.put("jsonrpc", "2.0");
json.put("method", "host.get");
json.put("params", param);
json.put("id", 1);
json.put("auth", "xxx");
// 将JSON对象转换为JSON字符串
JSONObject gson = new JSONObject(json);
String jsonString = gson.toJSONString();
url = "http://127.0.0.1/xxx";
String hostResult = UrlConnectionUtils.sendJsonRequest(url,jsonString);
jsonObject = JSON.parseObject(hostResult);