You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无Spring Data依赖的微服务如何通过RestTemplate获取Page类型数据?

解决方案

因为调用方未引入Spring Data依赖,无法直接使用Spring Data的Page类型,你可以通过以下方式处理:

1. 自定义与Spring Data Page结构一致的DTO类

Spring Data的Page序列化后的JSON结构通常包含核心字段:content(数据列表)、number(当前页码,从0开始)、size(每页条数)、totalElements(总数据量)、totalPages(总页数)、last(是否为最后一页)。你需要在调用方项目中定义一个结构匹配的DTO类,无需依赖Spring Data:

import java.util.List;

public class PageDTO<T> {
    private List<T> content;
    private int number;
    private int size;
    private long totalElements;
    private int totalPages;
    private boolean last;

    // 生成getter、setter方法,或使用Lombok的@Data注解简化
    public List<T> getContent() {
        return content;
    }

    public void setContent(List<T> content) {
        this.content = content;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public long getTotalElements() {
        return totalElements;
    }

    public void setTotalElements(long totalElements) {
        this.totalElements = totalElements;
    }

    public int getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }

    public boolean isLast() {
        return last;
    }

    public void setLast(boolean last) {
        this.last = last;
    }
}

2. 修改RestTemplate调用代码

将原代码中的Page<MyOwnType>替换为自定义的PageDTO<MyOwnType>,确保反序列化正常:

ResponseEntity<PageDTO<MyOwnType>> response = restTemplate.exchange(
    myurl, 
    HttpMethod.GET, 
    null, 
    new ParameterizedTypeReference<PageDTO<MyOwnType>>() {}
);

3. 实现分页循环获取所有数据

基于PageDTO的last字段或number与totalPages的关系,循环请求直到获取全部数据:

List<MyOwnType> allData = new ArrayList<>();
int currentPage = 0;
int pageSize = 10; // 与提供方接口的分页参数保持一致

while (true) {
    // 构造带分页参数的URL,示例参数为page和size,需匹配提供方接口定义
    String url = String.format("%s?page=%d&size=%d", baseUrl, currentPage, pageSize);
    ResponseEntity<PageDTO<MyOwnType>> response = restTemplate.exchange(
        url, 
        HttpMethod.GET, 
        null, 
        new ParameterizedTypeReference<PageDTO<MyOwnType>>() {}
    );

    PageDTO<MyOwnType> page = response.getBody();
    if (page == null || page.getContent().isEmpty()) {
        break;
    }

    allData.addAll(page.getContent());
    if (page.isLast()) {
        break;
    }
    currentPage++;
}

注意事项

  • 确保MyOwnType类的字段与提供方接口返回的JSON字段匹配,可通过@JsonProperty注解调整字段映射关系。
  • 如果提供方接口的分页参数(如页码起始值、参数名称)有差异,需同步调整URL中的参数配置。

内容的提问来源于stack exchange,提问作者Hubert Bratek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:12:49