Спокойная Весенняя служба с несколькими параметрами
Я строю службу 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 ответа:
Можно использовать параметр запроса для всех идентификаторов:
/search?ids=1,2,3,4,5,6,7
Затем обозначьте запятую и выполните поиск. Помните,что вы будете ограничены максимальной длиной URL-адреса, если вы выдадите его в качестве параметра строки запроса GET.
Я не думаю, что какая-либо часть RESTful design утверждает, что ваша структура url должна быть способна разрешать целые коллекции. Ваши первые (параметр запроса) и третьи (параметр url) предложения, вероятно, являются лучшими.
Я бы рекомендовал первое. Я уверен, что это разрешено в resttemplate. Глядя на предоставленную вами документацию, просто реализуйте один из методов post. Каждый из них принимает запрос в качестве параметра. Там, внутри, я уверен, есть какая-то реализация
getRequestParameters()
метод, который можно использовать для синтаксического анализа json / xml из тела запроса, содержащего ваши идентификаторы.Или, еще лучше, как связаны все эти id? Есть ли у них общий родительский ресурс? Если это так, то вы могли бы (и, вероятно, должны) сделать что-то подобное...
/commonparent/{parentId}
А затем в обработчике запроса запросите все идентификаторы и выполните процедуру как обычно.