Вопрос по web-services, spring-mvc, url, spring, java – как отправить массив в запросе URL

39

Мое требование заключается в следующем:

Я хочу дать имя актеру, дату начала, дату окончания и получить все фильмы, в которых он снимался в тот период.

По этой причине мой запрос на обслуживание такой.

  http://localhost:8080/MovieDB/GetJson?name=Actor&startDate=20120101&endDate=20120505

Теперь я хочу улучшить это. Я хочу дать дату начала, дату окончания и более одного имени актера и хочу посмотреть все эти фильмы актеров за этот период.

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

Я пишу веб-сервис на основе Java с использованием Spring.

Ниже код для поддержки одного актера

   @RequestMapping(value = "/GetJson", method = RequestMethod.GET) 
    public void getJson(@RequestParam("name") String ticker, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
   //code to get results from db for those params.
 }

Я думаю, что одним из решений является использование символа% для разделения имен актеров. Например:

 http://localhost:8080/MovieDB/GetJson?name=Actor1%Actor2%Actor3&startDate=20120101&endDate=20120505

Теперь в контроллере я проанализирую строку имени с% и верну имена всех актеров.

Это хороший способ сделать это или есть стандартный подход?

Спасибо

Я думаю, что это хорошо для 3 или 4 актеров. Но если вы хотите передать 100 актеров, возможно, вы можете использовать POST, а затем передать объект javascript. Объект может иметь пары имя-значение для каждого актера. Как вы думаете? Извините за поверхностный ответ Victor

Ваш Ответ

1   ответ
96

http://localhost:8080/MovieDB/GetJson?name=Actor1,Actor2,Actor3&startDate=20120101&endDate=20120505

или же:

http://localhost:8080/MovieDB/GetJson?name=Actor1&name=Actor2&name=Actor3&startDate=20120101&endDate=20120505

или же:

http://localhost:8080/MovieDB/GetJson?name[0]=Actor1&name[1]=Actor2&name[2]=Actor3&startDate=20120101&endDate=20120505

В любом случае, подпись вашего метода должна быть:

@RequestMapping(value = "/GetJson", method = RequestMethod.GET) 
public void getJson(@RequestParam("name") String[] ticker, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
   //code to get results from db for those params.
 }
но в случае, если у вас есть размер массива 1000, то вы не можете написать это все вещи отдельно .. ??
Есть ли «весенняя документация»? ссылку, на которую вы могли бы указать относительно этих 3 различных способов написания URL-адресов?
со значениями, разделенными запятыми, вы можете получить их в виде списка & lt; String & gt; запросить параметр
подход один (отдельно с запятыми) отличается от двух других. Пробовал на Java-приложении (на стороне сервера при поддержке undertow), если вы передадитеname=Actor1,Actor2,Actor3сервер не получит массив для вашегоname параметр, вместо этого вы получите одну строку:Actor1,Actor2,Actor3 пары. Два других отличаются, они все даютname параметр с массивом значений:["Actor1", "Actor2", "Actor3"], В соответствии сstackoverflow.com/questions/6243051/…многие другие фреймворки также рассматривают первый подход как один параметр запроса строки вместо массива

Похожие вопросы