目录
- 前言
- 1. 基本知识
- 2. Demo
- 3. 工具类
前言
最近需要提取一个Json的数据放到数据库,配合定时任务
需要用到的相关知识推荐阅读:
- java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
- 详细分析Java中的分布式任务调度框架 XXL-Job
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"};// 构建 URLStringBuilder 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();// 设置请求方法为 GETconnection.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();// 设置请求方法为 POSTconnection.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();// 设置请求方法为 POSTconn.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);