Служба RESTful Spring с несколькими параметрами - PullRequest
3 голосов
/ 20 декабря 2011

Я создаю спокойный сервис, который должен принимать любое количество параметров вместо one из примера ниже.

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

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

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

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

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

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

Я знаю похожие вопросы ( вызов-службы-отдыха-с-многими-параметрами , как создать остальные URL-адреса без глаголов , can-you-build-a-действительно-restful-service-that-Требует-много-параметров ) был задан ранее, но мне было трудно найти удовлетворительный ответ или, по крайней мере, ответ на основе RestTemplate.

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

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

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

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

/commonparent/{parentId}

И затем внутри вашего обработчика запросов запросите все идентификаторы и продолжите как обычно.

1 голос
/ 20 декабря 2011

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

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

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

...