当前位置: 首页 > 知识库问答 >
问题:

在使用RestTemplate调用的REST API中对对象列表具有null响应

虞博涛
2023-03-14

因此,我正在研究一个REST客户机,它使用REST API来使用Spring RestTemplate获得一个JSON对象。因此,我得到一个HTTP200OK响应,但类对象内部的列表(设备)为空。但会提取其他字段。当我用邮递员做同样的请求时,它工作得很好。这可能是什么原因?

RestTemplate代码段:

 RestTemplate restTemplate = new RestTemplate();
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json");
requestHeaders.add("Authorization", "Bearer " + apiToken);
HttpEntity entity = new HttpEntity(requestHeaders);
ResponseEntity<CloverMerchant> response = restTemplate.exchange(getMerchantDetailsUrl, HttpMethod.GET, entity, CloverMerchant.class);
return response.getBody();

CloverMerchant模型类:

private String id;
private String name;
private String website;
private boolean isBillable;
private CloverBusinessEquipments equipment;

// other relevant getters and setters
private List<CloverBusinessEquipment> elements;

    public CloverBusinessEquipments() {
}

@JsonGetter("elements")
public List<CloverBusinessEquipment> getElements() {
    return elements;
}
private String merchantId;
private String serialNumber;
private String equipmentCode;
private String equipmentCodeDesc;
private String provisionedDeviceType;
private boolean boarded;
private boolean provisioned;

// relevant getters and setters

REST API的预期响应JSON:

{
  "id": "5ZTFCGXQKVZNA",
  "name": "xxxx",
  "website": "https://xxxx.io",
  "isBillable": false,
  "equipment": {
  "elements": [
    {
        "merchantId": "5ZTFCGXQKVZNA",
        "boarded": false,
        "provisioned": true,
        "serialNumber": "C030UQ71040182",
        "equipmentCode": "105J",
        "equipmentCodeDesc": "Clover Mini",
        "provisionedDeviceType": "MAPLECUTTER"
    },
    {
        "merchantId": "5ZTFCGXQKVZNA",
        "boarded": false,
        "provisioned": true,
        "serialNumber": "C050UQ75150054",
        "equipmentCode": "1297",
        "equipmentCodeDesc": "Clover Station 2018",
        "provisionedDeviceType": "GOLDENOAK"
       }
    ]
  }
}

共有1个答案

从烈
2023-03-14

您的模型不代表JSON响应。您试图在JSON的根级别找到具有“elements”键的JSONObject,但实际上它位于“equipment”键之后的第二个级别。

变量-Private CloverBusinessEquipments Equipments;应表示以下内容:

"equipment": {
    "elements": [
        {
            "merchantId": "5ZTFCGXQKVZNA",
            "boarded": false,
            "provisioned": true,
            "serialNumber": "C030UQ71040182",
            "equipmentCode": "105J",
            "equipmentCodeDesc": "Clover Mini",
            "provisionedDeviceType": "MAPLECUTTER"
        },
        {
            "merchantId": "5ZTFCGXQKVZNA",
            "boarded": false,
            "provisioned": true,
            "serialNumber": "C050UQ75150054",
            "equipmentCode": "1297",
            "equipmentCodeDesc": "Clover Station 2018",
            "provisionedDeviceType": "GOLDENOAK"
        }
    ]
}

但是您已经为POJO建模,它认为equipments变量如下所示:

"elements": 
        {
            "merchantId": "5ZTFCGXQKVZNA",
            "boarded": false,
            "provisioned": true,
            "serialNumber": "C030UQ71040182",
            "equipmentCode": "105J",
            "equipmentCodeDesc": "Clover Mini",
            "provisionedDeviceType": "MAPLECUTTER"
        }
 类似资料:
  • 问题内容: 我有两个问题: 如何使用Spring RestTemplate映射JSON对象列表。 如何映射嵌套的JSON对象。 问题答案: 也许这样 控制器代码 RequestMapping 是对扩展名的添加状态代码。使用以及方法。在此类中,由和返回。

  • 我有两个问题: 如何使用spring RestTemplate映射JSON对象列表。 如何映射嵌套的JSON对象。 我正在尝试使用https://bitpay.com/api/rates,方法是按照http://spring.io/guides/gs/consource-rest/的教程学习。

  • 我试图将JSON字符串反序列化为Java对象,但遇到以下异常: JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@306A30C7未能对给定类型类java.util.ArrayList的json对象[“93”]进行反序列化 我的主文件: 应该表示JSON的类是: 我尝试了SO上给出的解决方案,但也有

  • 我正在尝试使用这些数据 https://api.nasa.gov/neo/rest/v1/neo/browse?api_key=demo_key 我成功地检索到了数据的“links”和“page”部分,但near_earth_objects数组为NULL。 我尝试了这篇文章中的建议: 使用Spring RestTemplate获取JSON对象列表 顶部答案给出错误: 下面是我的POJO的样子: 我

  • 我是Python的新手,遵循教程。教程中有一个的例子: 现在,在教程中,。但在我的例子中,我得到了以下错误: 请告诉我我错在哪里。我搜索所以这个,但它是不同的。