2016-06-02 2 views
1

Я пишу RESTful API, который потребляет другой RESTful API данных, и я использую данные Spring.Как перенести объект PageRequest в строку запроса?

сторона клиент посылает запрос страницы, используя параметры запроса, как:
http://api.mysite.com/products?page=1&size=20&sort=id,asc&sort=name,desc

И преобразование Params к PageRequest объекта и передать его на уровне услуг.

В службе, я хотел бы использовать TestTemplate взаимодействовать с API данных, которые используют URL-адрес, и Как я могу превратить PageRequest объект в строку запроса как

страница = 1 & размер = 20 & рода = идентификатор, по возрастанию & сортировать = имя, по убыванию

то я могу запросить данные, такие как:

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

ответ

0

можно передать как новый:

новый PageRequest (INT страницы, Int размер)

И в хранилище слоя можно записать в виде:

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

вместо Подъездная страница вы должны пройти нового PageRequest (интермедиат страница, внутр размер)

Для возрастающего порядка вы можете обратиться следующим образом:

List<Todo> findByTitleOrderByTitleAsc(String title); 
+0

Я не думаю, что у вас есть мой вопрос, моя ави нужно передать параметры запроса на другой успокоительный api. – Harry

0

Я думаю, вам просто нужно перебирать параметры запроса с другим запроса API , а затем передать все значения параметров в новый URL для нового запроса API.

код Судо может быть:

//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)); 

просто. Надеюсь, что ответит?

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(); 
} 

Это не является полным, вероятно есть несколько деталей, которые мне не хватает, но для моего случая пользователя (и я думаю, что для большинства из них) это работает.

Смежные вопросы