2011-09-07 46 views
3

我一直在尋找如何將參數傳遞給RESTlet webservice,但似乎沒有太多有關RESTlet的教程。如何將參數傳遞給android的RESTlet webservice?

我想發送一些從我的android應用程序中收集的參數的參數(如果我可以使用JSON來實現這一點,這將非常棒)。

在此先感謝。

+0

什麼的Restlet?你的意思是RESTful嗎? –

+2

Restlet是一個用於Java平臺的輕量級全面的開源REST框架。你可以查看[link](http://www.restlet.org/) 和[link](http://en.wikipedia.org/wiki/Restlet)以獲取更多有關restlet –

回答

5

以及我解決了這個

爲服務器端

@Post 
public JSONArray serverSideFunction(Representation entity) 
throws JSONException { 

    try { 
     JSONObject req = (new JsonRepresentation(entity)).getJsonObject(); 
     System.out.println(req.getString(/* filed name */)); 
     System.out.println(req.getString(/* filed name */)); 
     /* 
     * you can retrieve all the fields here 
     * and make all necessary actions 
     */ 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

作爲Android的側面

HttpClient client = new DefaultHttpClient(); 
    String responseBody; 
    JSONObject jsonObject = new JSONObject(); 

    try{ 
     HttpPost post = new HttpPost(WebService_URL); 
     jsonObject.put("field1", "........."); 
     jsonObject.put("field2", "........."); 

     StringEntity se = new StringEntity(jsonObject.toString()); 

     post.setEntity(se); 
     post.setHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
     post.setHeader("Content-type", "application/json"); 
     Log.e("webservice request","executing"); 

     ResponseHandler responseHandler = new BasicResponseHandler(); 
     responseBody = client.execute(post, responseHandler); 
     /* 
     * You can work here on your responseBody 
     * if it's a simple String or XML/JSON response 
     */ 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

我希望這會有所幫助

+0

的信息,你傳遞了WCF方法名嗎? –

+0

方法名稱僅用於SOAP Web服務(如WCF)這是一個其餘客戶端..通信通過URL和CRUD請求方法完成 –

+0

即使它是一個URL,我們是否會在調用時在URL後面綁定方法名? –

2

實際上,這取決於你想要做什麼。使用REST(請參閱http://en.wikipedia.org/wiki/Representational_state_transfer),有兩種方式可以傳遞參數或數據。在您需要了解一些概念之前:

  • 資源:REST實體本身。
  • 表示形式:對應於其狀態,可以使用不同的HTTP方法獲取或更新。使用內容類型標頭(Restlet中的媒體類型)標識內容的種類。
  • 方法:GET方法用於獲取資源狀態,PUT更新它,POST創建新資源並同時指定其狀態,DELETE刪除資源。

Restlet爲REST元素提供Java實體。

於是,經過描述,你可以看到,傳遞數據或參數取決於你的使用情況:

1°)你要更新資源狀態?在這種情況下,您將使用POST或PUT等方法使用請求的內容。數據結構不含文本,JSON,XML或二進制文件... Restlet提供ClientResource類以在RESTful應用程序上執行請求。它還提供支持來構建表示以發送和提取收到的數據。在這種情況下,從表單收集的數據將用於構建表示。下面是一些樣本:

//Samples for POST/PUT 
ClientResource cr = new ClientResource("http://..."); 
cr.post(new StringRepresentation("test")); 

MyBean bean = new MyBean(); 
(...) 
//Jackson is a tool for JSON format 
JacksonRepresentation<MyBean> repr 
     = new JacksonRepresentation<MyBean>(bean); 
cr.put(repr); 

//Samples for GET 
Representation repr1 = cr.get(); 
bean = (new JacksonRepresentation<MyBean>(repr1, MyBean.class)).getObject(); 

2°)你想在你的GET請求指定的參數(例如配置數據中檢索等等)?在這種情況下,你可以簡單地添加它的ClientResource,如下所述:

ClientResource cr = new ClientResource("http://..."); 
cr.getReference().addQueryParameter("q", "restlet"); 
Representation repr = cr.get(); 

在這種情況下,從表單收集的數據將被用於構建參數。

希望它可以幫助你。 蒂埃裏

0

如果你想要json結構和你的響應作爲JSONObject的請求也許你可以像這樣在服務器端:

public class RequestJSON extends ServerRecource{ 

    @Post("json") 
    public JSONObject testRequest(String entity){ 
    JSONObject request = new JSONObject(entity); 
    String value1 = request.getString("key1"); 
    int value2 = request.getInt("key2"); 
    return /* your JSONObject response */; 
    } 

} 

並可按您的要求:

{"key1":"value1", "key2":value2} 

我希望這可以幫助你