c
我有一个接口 http://ip:port/Others/airportnew/,采用post方法调用,采用body方式传值,其body内容为{
"data": {
"data": {
"image": ""
}
}
},现在我需要在java中调用这个接口,帮我写调用方法和测试的main方法
以下是一个使用Java调用该接口的完整示例,包括HttpURLConnection实现和测试main方法:
java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class AirportApiCaller {
// 调用接口的核心方法
public static String callAirportApi(String apiUrl, String jsonInput) throws IOException {
// 创建URL对象
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
try {
// 设置请求参数
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);
connection.setConnectTimeout(5000); // 5秒连接超时
connection.setReadTimeout(10000); // 10秒读取超时
// 发送请求体
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInput.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
// 获取响应代码
int responseCode = connection.getResponseCode();
// 读取响应内容
try (BufferedReader br = new BufferedReader(
new InputStreamReader(
(responseCode == HttpURLConnection.HTTP_OK) ?
connection.getInputStream() : connection.getErrorStream(),
StandardCharsets.UTF_8))) {
StringBuilder response = new StringBuilder();
String responseLine;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
// 返回响应结果(包含状态码和内容)
return String.format("HTTP %d: %s", responseCode, response.toString());
}
} finally {
connection.disconnect(); // 确保断开连接
}
}
public static void main(String[] args) {
// 接口地址
String apiUrl = "http://ip:port/Others/airportnew/";
// 构建JSON请求体
String jsonBody = "{\"data\":{\"data\":{\"image\":\"\"}}}";
try {
System.out.println("正在调用机场接口...");
String response = callAirportApi(apiUrl, jsonBody);
System.out.println("接口响应: " + response);
} catch (IOException e) {
System.err.println("调用接口时发生错误:");
e.printStackTrace();
}
}
}
使用说明:
-
核心方法 :
callAirportApi
- 接收API地址和JSON请求体
- 设置正确的HTTP头(Content-Type: application/json)
- 处理请求和响应流
- 返回包含状态码和响应内容的字符串
-
测试方法:
- 在main方法中直接提供接口URL和请求体
- 自动处理成功/失败的响应
- 包含基本的错误处理
可能的响应处理:
如果接口返回403错误(如之前问题所述),你可能需要添加认证信息。以下是添加认证头的修改示例:
java
// 在设置请求头的部分添加认证信息
connection.setRequestProperty("Authorization", "Bearer your_token_here");
// 或者
connection.setRequestProperty("x-ais-token", "your_token_value");
依赖说明:
- 纯Java标准库实现(java.net包),无需额外依赖
- 兼容Java 8及以上版本
常见问题排查:
-
如果遇到连接超时:
- 检查IP/端口是否可达(使用
telnet 172.22.1.65 8088
测试) - 调整
setConnectTimeout()
和setReadTimeout()
值
- 检查IP/端口是否可达(使用
-
如果返回403:
- 检查是否需要添加认证头(如x-ais-token)
- 确认服务器IP白名单设置
-
如果JSON格式错误:
- 使用在线JSON校验工具检查
jsonBody
格式 - 确保没有中文引号等非法字符
- 使用在线JSON校验工具检查
建议先用Postman测试确保接口可用,再用此Java代码集成到你的应用中。