我正在编写一个 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)
答案 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¶mName2=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,则返回“”;