在Java开发中,调用REST API并获取返回的JSON数组是日常业务里非常常见的需求,不管是前后端数据交互还是第三方服务对接,都需要稳定的处理逻辑来保障接口调用的效率。

常用HTTP客户端选择
Java生态中有多种工具可以发送HTTP请求获取REST API返回数据,不同工具的适用场景有所差异,开发者可以根据项目需求选择。
- Java 11+内置HttpClient:无需额外引入依赖,适合简单场景和JDK版本较高的项目
- Apache HttpClient:功能丰富,支持连接池、超时配置等高级特性,适合复杂业务场景
- OkHttp:轻量高效,支持HTTP/2,适合对性能要求较高的项目
使用Java内置HttpClient获取JSON数组
如果项目使用的是Java 11及以上版本,优先推荐使用内置的HttpClient,避免额外引入依赖。下面是完整的请求示例代码:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class RestApiJsonArrayDemo {
public static void main(String[] args) {
// 创建HttpClient实例,设置超时时间
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5))
.build();
// 构建HTTP请求,目标接口返回JSON数组
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://ipipp.com/api/user/list"))
.timeout(Duration.ofSeconds(10))
.header("Accept", "application/json")
.GET()
.build();
try {
// 发送请求并获取响应字符串
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String responseBody = response.body();
// 使用Jackson解析JSON数组
ObjectMapper objectMapper = new ObjectMapper();
// 定义类型引用,解析为List<Map<String, Object>>结构
List<Map<String, Object>> jsonArray = objectMapper.readValue(
responseBody,
new TypeReference<List<Map<String, Object>>>() {}
);
// 遍历处理后的JSON数组
for (Map<String, Object> item : jsonArray) {
System.out.println("用户ID:" + item.get("id") + ",用户名:" + item.get("name"));
}
} else {
System.out.println("请求失败,状态码:" + response.statusCode());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}JSON解析注意事项
获取到接口返回的字符串后,解析JSON数组时需要注意几个问题,避免常见的错误:
- 先校验接口返回的状态码,只有成功状态再处理响应内容,避免解析错误格式的字符串
- 如果JSON数组中的元素结构固定,可以定义对应的实体类来解析,比用Map更类型安全
- 大体积的JSON数组解析时,可以考虑使用流式解析(如Jackson的JsonParser),减少内存占用
性能优化建议
为了提升获取JSON数组的效率,可以从请求和解析两个方面做优化:
- 复用HttpClient实例,避免每次请求都创建新的客户端,减少资源消耗
- 根据业务需求设置合理的连接超时和读取超时,避免请求无限阻塞
- 如果接口返回数据量大,可以和接口提供方协商增加分页参数,避免一次性拉取过多数据
- Jackson的ObjectMapper也可以复用,无需每次解析都创建新的实例
常见错误排查
实际开发中可能会遇到一些典型问题,可以通过以下方式排查:
- 如果解析时报类型不匹配错误,先打印接口返回的原始字符串,确认是否符合预期格式
- 如果请求超时,先检查接口地址是否正确,网络是否通畅,再调整超时参数
- 如果返回的JSON数组有特殊字符,确认解析工具是否支持对应编码,必要时先做编码转换
JavaREST_APIJSON_arrayHttpClientJackson修改时间:2026-06-04 03:23:40