Спокойная Весенняя служба с несколькими параметрами


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

Предполагая следующую процедуру обслуживания

@RequestMapping("/start/id/{id}", RequestMethod.GET)
public void startService(@PathVariable String id) {...}

Существует клиентская реализация, основанная на RestTemplate

restTemplate.getForObject("/start/id/{id}", null, id);

Вопрос: но учитывая, что это могут быть тысячи ids, Какие спокойные подходы у меня есть к отправке всех параметров в одном запросе с использованием RestTemplate? Я видел ... предложения

  • добавить тело запроса, чтобы получить запрос - не представляется возможным с RestTemplate?
  • используйте разделитель в id, (например, id1|id2|....|idn) - похоже на hack
  • сначала поместите параметры, а затем выдайте GET для ссылки на ids-двойные запросы, кажется неинтуитивным
  • добавление нескольких параметров URL-адреса (?id=foo&id=bar&.....&id=foobar)

Я знаю, что подобные вопросы (звоните--спокойный-сервис-с-много-параметров, how-to-create-rest-urls-without-verbs, можете ли вы построить действительно спокойный сервис, который требует многих параметров), уже задавался раньше, но мне было трудно найти удовлетворительный ответ или, по крайней мере, ответ, основанный на RestTemplate.

2 3

2 ответа:

Можно использовать параметр запроса для всех идентификаторов:

/search?ids=1,2,3,4,5,6,7

Затем обозначьте запятую и выполните поиск. Помните,что вы будете ограничены максимальной длиной URL-адреса, если вы выдадите его в качестве параметра строки запроса GET.

Я не думаю, что какая-либо часть RESTful design утверждает, что ваша структура url должна быть способна разрешать целые коллекции. Ваши первые (параметр запроса) и третьи (параметр url) предложения, вероятно, являются лучшими.

Я бы рекомендовал первое. Я уверен, что это разрешено в resttemplate. Глядя на предоставленную вами документацию, просто реализуйте один из методов post. Каждый из них принимает запрос в качестве параметра. Там, внутри, я уверен, есть какая-то реализация getRequestParameters() метод, который можно использовать для синтаксического анализа json / xml из тела запроса, содержащего ваши идентификаторы.

Или, еще лучше, как связаны все эти id? Есть ли у них общий родительский ресурс? Если это так, то вы могли бы (и, вероятно, должны) сделать что-то подобное...

/commonparent/{parentId}

А затем в обработчике запроса запросите все идентификаторы и выполните процедуру как обычно.