【问题标题】:How to GET data using RestTemplate exchange?如何使用 RestTemplate 交换获取数据?
【发布时间】:2021-09-25 18:04:23
【问题描述】:

我目前正在发送一个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 中使用给定的 accessToken 测试了 GET 请求,它工作正常。

【问题讨论】:

  • 我希望你能得到一些答案,但坦率地说,我认为这是一个你可以轻松调试的问题 - 任何 IDE 都会为你获取 Spring 源代码,你可以看到响应处理失败的地方。
  • 我收到 200 响应代码,但正文为空。我正在按照其他用户提供的建议来解决它。希望它会很快得到修复。谢谢!

标签: java spring-boot get resttemplate


【解决方案1】:

你的 carList 对象是私有的,尝试为这个对象提供一个 setter 方法,如果契约没问题,反序列化就会正常工作。

@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 +
                '}';
    }
}

【讨论】:

  • 我试过了,但还是不行。这应该是合同中的内容。我已经用预期的 json 响应编辑了我的问题。谢谢!
  • 这是合同中的一个问题,感谢您强调这一点。
猜你喜欢
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2016-07-22
  • 2019-06-05
  • 2021-08-10
  • 1970-01-01
相关资源
最近更新 更多