获取“错误”:Postman上的“内部错误”并获取错误无法从START_OBJECT令牌中反序列化java.util.ArrayList的实例

时间:2017-04-27 19:56:17

标签: ibm-cloud-infrastructure

在Postman下面的Softlayer rest url下面遇到错误:

  

“内部错误”

当使用spring restTemplate从java代码中访问相同的rest url时,错误为

  

无法反序列化java.util.ArrayList的实例   START_OBJECT令牌。

https://api.softlayer.com/rest/v3/SoftLayer_Account/<Account-ID>/getInvoices?objectFilter={"invoices":{"createDate":{"operation":"betweenDate","options":[{"name":"startDate","value":["03/25/2017 00:00:00"]},{"name":"endDate","value": ["04/24/2017 23:59:59"]}]},"typeCode":{"operation":"RECURRING"}}}&objectMask=mask[id,items[id,recurringFee,recurringTaxAmount,oneTimeFee,oneTimeTaxAmount,description,hostName,domainName,hourlyRecurringFee,laborFee,laborTaxAmount,setupFee,setupTaxAmount,category[name],location[longName],billingItem[id,activeFlag,hourlyFlag,allowCancellationFlag,cancellationDate,orderItem[id,order[id,userRecord[username]]]]]]

1 个答案:

答案 0 :(得分:0)

当发票没有很多商品时,您发布的REST URL正在运行。您收到 “内部错误” ,因为内部某些发票正在返回错误 “允许的内存大小为402653184字节耗尽(尝试分配131072字节) “ ,此时添加

orderItem[id,order[id,userRecord[username]]]

我只用一张发票就得到了同样的错误,在我的情况下,发票上有超过1500件物品,这是很多物品。

你的面具非常大,需要检索很多数据,因此Ruber建议Softlayer rest call giving multiple entries for invoice in json response when object filter is applied to relational properties使用一些编程语言来检索你需要的所有数据:

基本上您需要执行以下操作:

第1步: 使用SoftLayer_Account::getInvoices获取所有发票,根据您的要求,它应该是这样的:

https://api.softlayer.com/rest/v3/SoftLayer_Account/getInvoices?objectFilter={"invoices":{"createDate":{"operation":"betweenDate","options":[{"name":"startDate","value":["03/25/2017 00:00:00"]},{"name":"endDate","value": ["04/24/2017 23:59:59"]}]},"typeCode":{"operation":"RECURRING"}}}&objectMask=mask[id,createDate]

这将返回所有发票的ID,您将需要执行以下步骤

第2步: 对于每个检索到的发票,请使用方法SoftLayer_Billing_Invoice::getItems,使用resultLimits和您的掩码如下。

https://api.softlayer.com/rest/v3/SoftLayer_Billing_Invoice/[invoiceId]/getItems?resultLimit=100,0&objectMask=mask[id,recurringFee,recurringTaxAmount,oneTimeFee,oneTimeTaxAmount,description,hostName,domainName,hourlyRecurringFee,laborFee,laborTaxAmount,setupFee,setupTaxAmount,category[name],location[longName],billingItem[id,activeFlag,hourlyFlag,allowCancellationFlag,cancellationDate,orderItem[id,order[id,userRecord[id,username]]]]]

根据您在步骤1中检索到的每个ID更改 [invoiceId]

在这种情况下,你需要使用循环,第一个循环为每个发票调用SoftLayer_Billing_Invoice::getItems,第二个循环用100个100来检索项目。(而不是100,你可以在resultLimit参数中设置另一个值)< / p>

如果您设置 resultLimit = 100,1 ,则会返回101到200之间的所有项目。我建议您查看https://sldn.softlayer.com/article/using-result-limits-softlayer-api

我建议使用PythonJavaGoRuby等语言。您可以在此处查看列表https://sldn.softlayer.com/article/softlayer-api-overview

注意:不幸的是,SoftLayer Java API不支持对象过滤器功能。

我希望这对你有所帮助。

此致