#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. Это была проблема в контракте, спасибо, что обратили на это внимание.