如何将PageRequest对象转换为查询字符串?

时间:2016-06-02 04:40:40

标签: rest spring-data spring-data-jpa

我正在编写一个 RESTful API ,它使用了另一个 RESTful Data API ,而我正在使用Spring Data。

客户端使用查询参数发送页面请求,如:
http://api.mysite.com/products?page=1&size=20&sort=id,asc&sort=name,desc

我将 params 转换为 PageRequest 对象并将其传输到服务层。

在服务中,我想使用TestTemplate与使用URL的Data API进行交互,如何将PageRequest对象转换为查询字符串,如

  

页= 1&安培;大小= 20&安培;排序= ID,ASC&安培;排序=名称,内容描述

然后我可以请求数据:

restTemplate.getForEntity("http://data.mysite.com/products?page=1&size=20&sort=id,asc&sort=name,desc",String.class)                    

4 个答案:

答案 0 :(得分:0)

您可以传递新内容:

new PageRequest(int page,int size)

在存储库层中,您可以写为:

Page<User> findByName(String name,Pageable page)

代替可分页页面,您必须传递新的PageRequest(int page,int size)

对于升序,您可以参考:

List<Todo> findByTitleOrderByTitleAsc(String title);

答案 1 :(得分:0)

我认为您只需要遍历其他API请求中的请求参数,然后将所有参数值传递到新的Url以获取新的API请求。

sudo代码可能是:

//all query params can be found in Request.QueryString
var queryParams = Request.QueryString; 

private string ParseIntoQuery(NameValueCollection values)
{
   //parse the identified parameters into a query string format 
   // (i.e. return "?paramName=paramValue&paramName2=paramValue2" etc.)
}

在您的代码中,您将执行此操作:

restTemplate.getForEntity(urlAuthority + ParseIntoQuery(Request.QueryString));
这很简单。希望有答案吗?

答案 2 :(得分:0)

我知道我对这个答案有点迟了,但我也找不到已经实现过的方法。我最终开发了自己的例行程序:

public static String encodeURLComponent(String component){
    try {
        return URLEncoder.encode(component, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException("You are dumm enough that you cannot spell UTF-8, are you?");
    }
}

public static String queryStringFromPageable(Pageable p){
    StringBuilder ans = new StringBuilder();
    ans.append("page=");
    ans.append(encodeURLComponent(p.getPageNumber() + ""));

    // No sorting
    if (p.getSort() == null)
        return ans.toString();

    // Sorting is specified
    for(Sort.Order o : p.getSort()){
        ans.append("&sort=");
        ans.append(encodeURLComponent(o.getProperty()));
        ans.append(",");
        ans.append(encodeURLComponent(o.getDirection().name()));
    }

    return ans.toString();
}

它不完整,可能有一些我遗漏的细节,但对于我的用户案例(我认为对于大多数人而言)这都有效。

答案 3 :(得分:0)

to

addRequestParam方法:

UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromHttpUrl("http://data.mysite.com/products");

    addRequestParam(uriComponentsBuilder, "page", pageable.getPageNumber());
    addRequestParam(uriComponentsBuilder, "size", pageable.getPageSize());

    String uri = uriComponentsBuilder.toUriString() + sortToString(pageable.getSort());

将sortToString(Sort sort)方法实现为@Shalen。您必须获得以下内容:&sort = name,asc&sort = name2,desc。如果Sort为null,则返回“”;