在 http get 请求中设置对象

Setting object in http get request

我正在为可分页 Spring 数据资源编写客户端 java 程序 存储库 GET API 的格式为:

public Page<Person> findByCountry(..., Pageable pageable);

我创建了格式为

的可分页请求
Pageable pageable = new PageRequest(1, 40, new Sort("name"));

但是,我想知道如何将此分页设置到我的 http client 中。 我正在使用 HttpGetHttpPost.

我用谷歌搜索了一下,发现大多数链接都使用 spring rest 控制器。我不能通过使用 apache http 客户端来做到这一点吗? Springs hateoas 似乎是另一种选择。但这意味着向我的客户项目添加另一个 jar。只是请求payload设置的问题吗?

另外,如果有更好的方法请告诉我。我想遍历所有页面直到数据耗尽。

谢谢。

我不确定我要建议的方法是否是最好的方法,但这就是我的方法。由于在不向客户端添加 Spring 依赖项的情况下无法引用 Spring 依赖对象,即瘦客户端中的 Pageable ,因此您可能希望将 PageRequest 详细信息作为 HTTP GET 查询参数发送到 HTTP GET API 像这样并循环你的技术独立 pagewrapper 结果如下所示。

API签名

public PageWrapper findByCountry(..., int page, int size, String sortBy, String sortDirection);

PageWrapper:

List<T> items;
int currentPage;
int totalPages;
int totalItems;
boolean isLast;

API代码:

Pageable nextPageable = new PageRequest(page, size, new Sort(sortBy));
Page<Person> personsPage =  countryService.findByCountry(.., nextPageable);
if(null != personsPage){
  PageWrapper<Person> pageWrapper = new PageWrapper<>();
  pageWrapper.setItems(personsPage.getContent());
  pageWrapper.setTotalPages(personsPage.getTotalPages());
  pageWrapper.setTotalItems(personsPage.getTotalElements());
  pageWrapper.setCurrentPage(personsPage.getNumber())
  pageWrapper.setIsLast(personsPage.isLast());
  return pageWrapper
}

客户代码:

PageWrapper page = null;
do {
    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("page", index++);
    paramMap.put("size", size);
    paramMap.put("sortBy", "name");
    page = (PageWrapper) httpClient.get(requestURI, paramMap);
    process(page);
}while(!page.getIsLast())

事实证明解决方案很简单。 我犯的错误是使用非默认名称设置参数。如果您传递正确的参数,Spring 的其余部分 api 将创建一个可分页对象(如 reference doc for Spring Data Repositories 的 'HandlerMethodArgumentResolvers for Pageable and Sort' 部分所述)

如果请求中包含给定名称(如页面、大小等)的参数,将自动创建可分页