在http get请求中设置对象

时间:2015-07-22 15:07:35

标签: java spring spring-data http-get apache-commons-httpclient

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

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

我已经创建了格式为

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

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

我google了一下,发现大多数链接使用弹簧控制器。我可以不使用apache http客户端吗? Springs hateoas似乎是另一种选择。但这意味着在我的客户端项目中添加另一个jar。这只是如何在请求上设置有效负载的问题吗?

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

感谢。

2 个答案:

答案 0 :(得分:1)

我不确定我建议的是最好的方法,但这就是我要做的。由于在没有向客户端添加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())

答案 1 :(得分:0)

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

如果请求具有给定名称(如页面,大小等)的参数,

将自动创建Pageable。