2012-08-09 53 views
30

我要求如下:如何在URL請求發送陣列

我想給演員的名字,開始日期,結束日期,讓他在那個時期擔任了所有的電影。

因此,我的服務請求是這樣的。

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

現在,我想改善它。 我想給出一個開始日期,結束日期和多個演員的名字,並希望看到那個時期的所有演員電影。

我不知道我的網址應該如何支持這樣的事情。

我正在寫一個基於java的web服務使用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 

現在,在控制器中,我將使用%解析名稱字符串並取回所有演員的名稱。

這是一個很好的方法來做到這一點,或者是否有一個標準的方法?

感謝

+1

我覺得這對3或4位演員來說很好。但是如果你想傳遞100個演員,也許你可以使用POST,然後傳遞一個javascript對象。該對象可以具有每個演員的名稱 - 值對。你怎麼看?對不起,粗略的回覆 – Victor 2012-08-09 18:58:03

+0

我不明白你是什麼意思,通過使用後。你能指點我一個例子嗎?謝謝 – javaMan 2012-08-09 19:28:59

回答

77

用逗號分隔:

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. 
} 
+1

但如果你有1000個大小的數組,那麼你不能寫這個所有的東西分開吶.. ?? – Krishna 2014-02-11 05:51:56

+4

有沒有一個「Spring文檔」鏈接可以指向關於這三種不同的URL編寫方式? – TPPZ 2014-07-03 16:14:26

+5

方法一(用逗號分隔)與另外兩個不同。如果你通過'name = Actor1,Actor2,Actor3',服務器不會爲你的'name'參數獲得一個數組,而是你得到一個單一的字符串:'Actor1, Actor2,Actor3'參數。其他兩個不同,它們都給'name'參數賦值:'[「Actor1」,「Actor2」,「Actor3」]'。根據http://stackoverflow.com/questions/6243051/how-to-pass-an-array-within-a-query-string,許多其他框架也把方法一作爲單個字符串查詢參數而不是數組 – 2016-06-19 09:43:25