Как получить данные с помощью RestTemplate exchange?

#java #spring-boot #get #resttemplate

Вопрос:

В настоящее время я отправляю GET request сообщение, которое возвращает null тело в ответе.

 @Service
public class CarService {
private RestTemplate restTemplate;
private final String url = "url";
private final String accessToken = "x";

@Autowired
public CarService () throws URISyntaxException {
    restTemplate = new RestTemplate();
}

public void fetchCars() throws URISyntaxException {
    HttpHeaders headers = new HttpHeaders();
    headers.setBearerAuth(accessToken);
    headers.setAccept(List.of(MediaType.APPLICATION_JSON));
    ResponseEntity<CarList> carList = restTemplate.exchange
            (RequestEntity.get(new URI(url)).headers(headers).build(), CarList.class);
}

}
 

В CarList.class выглядит так:

 @JsonIgnoreProperties(ignoreUnknown = true)
public class CarList{
    private List<Car> carList;

    public CarList(List<Car> carList) {
        this.carList= carList;
    }

    public CarList() {
    }

    public List<Car> getCarList() {
        return carList;
    }

    @Override
    public String toString() {
        return "CarList{"  
                "carList="   carList  
                '}';
    }
}
 

Ответ в Postman выглядит так:

 {
    "cars": [
        {
            "carUid": "aaaa-ccc-dd-cc-ee",
            "model": "hyundai",
            "price": 20000,
            "soldAt": "2021-09-24T22:10:15.307Z"
        }
    ]
}
 

Я что-то упускаю?
Это первый раз, когда я пытаюсь потреблять у клиента, поэтому примите во внимание самые основные вещи, которых мне может не хватать.

Я уже проверил запрос на получение в Postman с данным доступом, и он работает нормально.

Комментарии:

1. Я надеюсь, что вы получите некоторые ответы, но, честно говоря, я думаю, что эту проблему можно легко отладить — любая среда разработки получит для вас исходный код Spring, и вы сможете увидеть, где происходит сбой обработки ответов.

2. Я получаю код ответа 200, но тело равно нулю. Я следую предложению другого пользователя, чтобы решить эту проблему. Надеюсь, это будет исправлено в ближайшее время. Спасибо!

Ответ №1:

Если объект CarList является частным, попробуйте предоставить метод настройки для этого объекта, и если контракт в порядке, десериализация будет работать нормально.

 @JsonIgnoreProperties(ignoreUnknown = true)
public class CarList{
    private List<Car> carList;

    public CarList(List<Car> carList) {
        this.carList= carList;
    }

    public CarList() {
    }

    public List<Car> getCarList() {
        return carList;
    }

    public setCarList(List<Car> carList) {
        this.carList= carList;
    }

    @Override
    public String toString() {
        return "CarList{"  
                "carList="   carList  
                '}';
    }
}
 

Комментарии:

1. Я пробовал это, но все равно не получается. Это должно быть что — то в контракте. Я отредактировал свой вопрос с ожидаемым ответом json. Спасибо!

2. Это была проблема в контракте, спасибо, что обратили на это внимание.