You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析URL返回的JSON对象数组?RestTemplate响应解析问题咨询

RestTemplate解析JSON数组响应解决方案

问题原因

你当前直接使用Object[].class作为响应类型,RestTemplate会把JSON数组中的每个对象默认解析为LinkedHashMap实例,无法直接通过字段名访问属性,且不具备类型安全性。同时你原有代码存在语法错误:exchange()方法返回的是ResponseEntity对象,不能直接赋值给数组类型。

方案1:自定义实体类映射(推荐)

步骤1:定义匹配JSON结构的实体类

首先根据返回的JSON结构定义两个实体类,嵌套的models数组单独定义子实体:

import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

// 嵌套的models对象实体
public class Model {
    private String description;
    private String id;
    // JSON中字段首字母大写,加注解映射
    @JsonProperty("Planning")
    private Boolean planning;

    // 补全无参构造、getter和setter方法
}

// 外层响应对象实体
public class RespItem {
    private String name;
    private String description;
    private String createdBy;
    private String id;
    private List<Model> models;
    private String changedBy;
    private String openURL;
    // 兼容不同返回项的独有字段,不存在时会自动赋值为null
    private String changed;
    private String URL;

    // 补全无参构造、getter和setter方法
}

步骤2:使用ParameterizedTypeReference接收泛型集合

要正确解析泛型类型的响应,需要使用ParameterizedTypeReference指定泛型类型:

import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.ResponseEntity;
import java.util.List;

ParameterizedTypeReference<List<RespItem>> typeRef = new ParameterizedTypeReference<List<RespItem>>() {};
ResponseEntity<List<RespItem>> resp = restTemplate.exchange(url, HttpMethod.GET, item, typeRef);
// 获取解析后的对象列表
List<RespItem> itemList = resp.getBody();

方案2:无需自定义实体类,使用JsonNode动态取值

如果不想定义实体类,可以直接用JsonNode接收响应,动态读取属性:

import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.ResponseEntity;
import java.util.List;

ParameterizedTypeReference<List<JsonNode>> typeRef = new ParameterizedTypeReference<List<JsonNode>>() {};
ResponseEntity<List<JsonNode>> resp = restTemplate.exchange(url, HttpMethod.GET, item, typeRef);
List<JsonNode> nodeList = resp.getBody();

// 取值示例
for (JsonNode node : nodeList) {
    String name = node.get("name").asText();
    String id = node.get("id").asText();
    // 读取嵌套的models数组
    JsonNode models = node.get("models");
    if (models != null && models.isArray()) {
        for (JsonNode modelNode : models) {
            String modelId = modelNode.get("id").asText();
            Boolean planning = modelNode.get("Planning").asBoolean();
        }
    }
}

内容的提问来源于stack exchange,提问作者Ritesh Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:24:03