2012-11-09 46 views
0

我正在使用Google Http Client和Jackson向後端查詢數據(JSON API)。使用Google Http客戶端在GET請求中傳遞對象作爲參數

我需要傳遞參數(一個Java bean對象)。該對象可能具有很少或很多字段。起初,我試圖把它作爲內容如下:

HttpRequest request = requestFactory.buildGetRequest(getUrl(api)).setContent(new JsonCContent(jsonFactory, params));

不過,我不允許設置在GET操作的HTTP內容。

任何建議如何傳遞這些參數?

在一個條件下: 我不想編寫一個util方法將此對象轉換爲URL參數字符串。但是如果已經有了可重用的API,那就沒問題了。

如果可能,我需要通用解決方案。因爲我打算將此應用於600個JSON API調用。

我最後的選擇是將後端更改爲期望POST請求而不是GET,然後我在客戶端執行POST操作。

感謝

回答

0

這似乎是預期的使用是延長您所使用的網址類爲您buildGetRequest()電話。例如,假設您想提供兩個額外的查詢參數,稱爲「user」和「token」。

HttpRequest request = requestFactory.buildGetRequest(
    new CustomUrl("http://www.yourserver.com").setUser(userId).setToken(token)); 

其中CustomUrl類的定義是:你可以用下面這樣做

public class CustomUrl extends GenericUrl { 
    public CustomUrl(String encodedUrl) { 
     super(encodedUrl); 
    } 

    @Key("user") 
    private String mUserId; 

    @Key("token") 
    private String mToken; 

    public CustomUrl setUser(String userId) { 
     mUserId = userId; 
     return this; 
    } 

    public CustomUrl setToken(String token) { 
     mToken = token; 
     return this; 
    } 
} 

的值是沒有必要的@Key註解,但將作爲各自的名字提供查詢參數。如果省略,則將使用變量的名稱(see example

檢查google-http-client's javadoc以瞭解更多信息。

+0

使用您的建議解決方案,對於需要作爲參數發送的每個java bean,我必須爲此創建一個自定義URL對象。那麼,那不是我想要的。不管怎麼說,還是要謝謝你 – hida

3

您可以使用GenericUrl.put(從GenericData繼承)來設置查詢參數,而不是擴展GenericUrl,而不是擴展GenericUrl。例如:

GenericUrl genericUrl = new GenericUrl("http://yourapi.com/request"); 
genericUrl.put("user", "user name"); 
genericUrl.put("token", "token values"); 
HttpRequest request = requestFactory.buildGetRequest(genericUrl); 
相關問題