1.选择合适的 HTTP 库
- 在 Java 中,可以使用多种库来进行 HTTP 请求。
java.net.HttpURLConnection
是 Java 标准库中的类,能够满足基本的 HTTP 请求需求,但使用起来相对复杂。另外,还有一些第三方库,如OkHttp
和Apache HttpClient
,它们提供了更简洁、高效的接口。 - 以
OkHttp
为例,首先需要在项目的pom.xml
(如果是 Maven 项目)中添加OkHttp
的依赖:<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp3</artifactId><version>4.9.3</version> </dependency>
如果是 Gradle 项目,在
build.gradle
文件中添加依赖:
implementation 'com.squareup.okhttp3:okhttp3:4.9.3'
2.了解 API 接口文档
- 获取 API 接口的详细文档是关键的第一步。文档中应该包含接口的 URL、请求方法(如 GET、POST、PUT、DELETE)、请求参数的类型和格式(是在 URL 中传递的查询参数,还是在请求体中的 JSON 或表单数据),以及响应数据的格式(如 JSON、XML 等)。
3.使用 OkHttp 发送请求(以 GET 请求为例)
- 假设我们有一个简单的天气 API 接口,它通过 GET 请求返回指定城市的天气信息。接口 URL 是
https://api.weather.com/current
,请求参数是city
(城市名称),响应数据是 JSON 格式,包含temperature
(温度)和weather_condition
(天气状况)等字段。
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;public class ApiClient {public static void main(String[] args) {OkHttpClient client = new OkHttpClient();String url = "https://api.weather.com/current";// 设置请求参数String city = "Shanghai";String fullUrl = url + "?city=" + city;Request request = new Request.Builder().url(fullUrl).build();try {Response response = client.newCall(request).execute();if (response.isSuccessful()) {String jsonData = response.body().string();// 在这里可以使用JSON解析库(如Gson或Jackson)来解析jsonDataSystem.out.println(jsonData);} else {System.out.println("请求失败,状态码: " + response.code());}} catch (IOException e) {e.printStackTrace();}}
}
- 在这个示例中:
- 首先创建了一个
OkHttpClient
对象,它是OkHttp
库用于发送请求的主要入口。 - 构建了请求的 URL,将城市名称作为查询参数添加到接口 URL 后面。
- 使用
Request.Builder
构建了一个Request
对象,指定了请求的 URL。 - 通过
client.newCall(request).execute()
发送请求并获取Response
对象。 - 根据
Response
对象的isSuccessful()
方法判断请求是否成功。如果成功,通过response.body().string()
获取响应的字符串内容(假设是 JSON 数据),并可以后续使用 JSON 解析库进行解析。如果请求失败,打印出状态码。
4.使用 OkHttp 发送 POST 请求(示例)
- 假设 API 接口需要通过 POST 请求提交数据,并且数据格式是 JSON。例如,有一个用户注册接口,URL 是
https://api.example.com/register
,请求体中的 JSON 数据包含username
和password
字段。import okhttp3.*; import java.io.IOException;public class ApiClient {public static void main(String[] args) {OkHttpClient client = new OkHttpClient();String url = "https://api.example.com/register";String jsonData = "{\"username\": \"testuser\", \"password\": \"testpassword\"}";MediaType mediaType = MediaType.get("application/json; charset=utf-8");RequestBody body = RequestBody.create(jsonData, mediaType);Request request = new Request.Builder().url(url).post(body).build();try {Response response = client.newCall(request).execute();if (response.isSuccessful()) {String responseData = response.body().string();System.out.println(responseData);} else {System.out.println("请求失败,状态码: " + response.code());}} catch (IOException e) {e.printStackTrace();}} }
这里的步骤与 GET 请求类似,但有以下不同点:
- 需要构建一个包含 JSON 数据的
RequestBody
对象,指定数据的类型为application/json
。 - 在构建
Request
对象时,使用post
方法而不是get
方法,将RequestBody
对象作为参数传递进去,以表示这是一个 POST 请求。
5.解析响应数据
- 如果响应数据是 JSON 格式,可以使用
Gson
或Jackson
等 JSON 解析库。以Gson
为例,首先需要在项目的依赖管理文件(pom.xml
或build.gradle
)中添加Gson
的依赖。 - 对于 Maven 项目,在
pom.xml
中添加:<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.9</version> </dependency>
对于 Gradle 项目,在
build.gradle
中添加:implementation 'com.google.code.gson:gson:2.8.9'
假设响应数据是一个包含天气信息的 JSON 对象,例如
{"temperature": 25, "weather_condition": "Sunny"}
,可以使用Gson
来解析:import com.google.gson.Gson; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import java.io.IOException;public class ApiClient {public static void main(String[] args) {OkHttpClient client = new OkHttpClient();String url = "https://api.weather.com/current";// 设置请求参数String city = "Shanghai";String fullUrl = url + "?city=" + city;Request request = new Request.Builder().url(fullUrl).build();try {Response response = client.newCall(request).execute();if (response.isSuccessful()) {String jsonData = response.body().string();Gson gson = new Gson();WeatherInfo weatherInfo = gson.fromJson(jsonData, WeatherInfo.class);System.out.println("温度: " + weatherInfo.temperature);System.out.println("天气状况: " + weatherInfo.weatherCondition);} else {System.out.println("请求失败,状态码: " + response.code());}} catch (IOException e) {e.printStackTrace();}} } class WeatherInfo {public int temperature;public String weatherCondition; }
在这个示例中,定义了一个
WeatherInfo
类来与 JSON 数据的结构相匹配。通过gson.fromJson
方法,将 JSON 字符串解析为WeatherInfo
对象,然后就可以方便地访问对象中的属性来获取天气信息。