Наличие пустого тела ответа при попытке получить списки объектов с помощью RestTemplate - PullRequest
0 голосов
/ 26 февраля 2019

Итак, я работаю над клиентом REST, который использует API REST для получения списка объектов json, используя Spring RestTemplate.Я устанавливаю необходимые заголовки с помощью ключа API.Таким образом, я получаю ответ HTTP 200 OK, но тело ответа пусто.Когда я делаю тот же запрос, используя Почтальон, он работает хорошо.Что может быть причиной этого?

Фрагмент кода:

 public List<PoyntSubscription> getSubscriptions(String apiToken, String cloudId, String cloudBaseUrl) {
    List<PoyntSubscription> subscriptions = new ArrayList<>();

    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Api-Version", "1.2");
    headers.set("Authorization", apiToken);
    HttpEntity entity = new HttpEntity(headers);

    ResponseEntity<PoyntSubscription> response = restTemplate.exchange(
            cloudBaseUrl + cloudId + "/subscriptions?start=10", HttpMethod.GET, entity, PoyntSubcriptionsList.class);
    return response.getBody().getSubscriptions();
}

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

{
"list": [
    {
        "startAt": "2019-01-22T00:00:00Z",
        "paymentStatus": "OVERDUE",
        "createdAt": "2019-01-22T03:05:28Z",
        "updatedAt": "2019-02-21T03:05:28Z",
        "businessId": "xxxx",
        "appId": "xxxx",
        "subscriptionId": "xxxxx",
        "phase": "FULL",
        "planId": "xxxx",
        "bundleId": "xxxx",
        "planName": "xxxx",
        "status": "ACTIVE"
    }
 ],
 "start": 10,
 "total": 14,
 "count": 4
}

Класс оболочки PoyntSubscription:

public class PoyntSubcriptionsList {
private List<PoyntSubscription> subscriptions = new ArrayList();

public PoyntSubcriptionsList() {
}

public List<PoyntSubscription> getSubscriptions() {
    return this.subscriptions;
}

public void setSubscriptions(List<PoyntSubscription> subscriptions) {
    this.subscriptions = subscriptions;
 }
}

Класс PoyntSubscription:

public class PoyntSubscription {
private String startedDate;
private String paymentStatus;
private String createdDate;
private String updatedDate;
private String businessId;
private String appId;
private String subscriptionId;
private String phase;
private String planId;
private String bundleId;
private String planName;
private String status;

public PoyntSubscription() {
}

1 Ответ

0 голосов
/ 26 февраля 2019

Аннотировать getSubscriptions() с @JsonGetter("list") в классе PoyntSubcriptionsList.

Вам также необходимо изменить ResponseEntity<PoyntSubscription> response на ResponseEntity<PoyntSubcriptionsList> response, поскольку PoyntSubcriptionsList представляет ваш JSON.

...