Как получить конкретную переменную из объекта JSON? - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь получить некоторые данные из другого API, и мне нужно получить StatusCode из объекта JSON, но я получаю нулевой объект.

Я пытался создать новый класс с переменной StatusCode, но я получаю нулевое значение. Я пытаюсь получить эти данные:

Data(data=[{"Number":"20450143160505","DateCreated":"11-06-2019 10:14:27","DocumentWeight":0.5,"CheckWeight":0,"SumBeforeCheckWeight":0,"PayerType":"Recipient","RecipientFullName":"","RecipientDateTime":"","ScheduledDeliveryDate":"12-06-2019","PaymentMethod":"Cash","CargoDescriptionString":"","CargoType":"Parcel","CitySender":"Сокільники","CityRecipient":"Київ","WarehouseRecipient":"Відділення №150 (до 30 кг): вул. Антоновича, 43 (м.\"Олімпійська\")","CounterpartyType":"PrivatePerson","Redelivery":1,"RedeliverySum":"","RedeliveryNum":"","RedeliveryPayer":"","AfterpaymentOnGoodsCost":"","ServiceType":"WarehouseWarehouse","UndeliveryReasonsSubtypeDescription":"","WarehouseRecipientNumber":150,"LastCreatedOnTheBasisNumber":"","LastCreatedOnTheBasisDocumentType":"","LastCreatedOnTheBasisPayerType":"","LastCreatedOnTheBasisDateTime":"","LastTransactionStatusGM":"","LastTransactionDateTimeGM":"","WarehouseRecipientInternetAddressRef":"916c7c93-8460-11e4-acce-0050568002cf","MarketplacePartnerToken":"","DateScan":"12:23 12.06.2019","ClientBarcode":"","SenderAddress":"","RecipientAddress":"","CounterpartySenderDescription":"","CounterpartyRecipientDescription":"","CounterpartySenderType":"Organization","PaymentStatus":"","PaymentStatusDate":"","AmountToPay":"","AmountPaid":"","WarehouseRecipientRef":"916c7c94-8460-11e4-acce-0050568002cf","DocumentCost":40,"AnnouncedPrice":"","OwnerDocumentNumber":"","DateFirstDayStorage":"2019-06-21","InternationalDeliveryType":"","DaysStorageCargo":"","RecipientWarehouseTypeRef":"841339c7-591a-42e2-8233-7a0a00f0ed6f","StorageAmount":"","StoragePrice":"","VolumeWeight":"0.50","SeatsAmount":"1","OwnerDocumentType":"","ActualDeliveryDate":"2019-06-12 12:23:22","DateReturnCargo":"","CardMaskedNumber":"","Status":"Прибув у відділення","StatusCode":"7","RefEW":"8ed817ef-8c18-11e9-91ff-0025b501a04b","RedeliveryPaymentCardRef":"","RedeliveryPaymentCardDescription":"","CreatedOnTheBasis":"","DatePayedKeeping":"2019-06-21 00:00:00","OnlineCreditStatusCode":"","OnlineCreditStatus":""}])

Способ получения данных :

RestTemplate restTemplate = new RestTemplate();
                Data string = restTemplate.postForObject(blalba,blabla,Data.class)

И мой класс

public class Data {
    @JsonProperty("data")
    private JsonNode data;
//get set
}

1 Ответ

2 голосов
/ 12 июня 2019

Есть несколько способов достичь этого:

Использование Map<String, Object>

Вы можете прочитать полезную нагрузку ответа как Map<String, Object>:

ParameterizedTypeReference<HashMap<String, Object>> responseType = 
        new ParameterizedTypeReference<HashMap<String, Object>>() {};

Map<String, Object> responsePayload = 
        restTemplate.exchange(purchaseRequestDetailsEndpoint, HttpMethod.POST,
                new HttpEntity<>(requestPayload), responseType);

String statusCode = responsePayload.get("StatusCode");

Сопоставление только необходимых свойств

Определите класс, сопоставляющий необходимые свойства:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponsePayload {

    @JsonProperty("StatusCode")
    private String statusCode;
}

И прочитайте полезную нагрузку ответа, используя класс, определенный выше:

ResponsePayload responsePayload = 
        restTemplate.postForObject(uri, request, ResponsePayload.class);

String statusCode = responsePayload.getStatusCode();

В качестве альтернативы вы можете отобразить нужные вам свойства и сохранить остальные на карте:

@Data
public class ResponsePayload {

    @JsonProperty("StatusCode")
    private String statusCode;

    @JsonAnySetter
    private Map<String, Object> properties = new HashMap<>();

    @JsonIgnore
    public Object get(String key) {
        return properties.get(key);
    }
}
...