2012-10-22 64 views
2

我要打電話與POST method.Below休息web服務是服務URL和它的參數,我需要通過如何發送JSON數據爲POST RESTful服務

Rest Service: https://url/SSOServer/SSO.svc/RestService/Login 

Json Object {"ProductCode":"AB","DeviceType":"android Simulator","UserName":"","ModuleCode":"AB_MOBILE","DeviceId":"device-id","Version":"1.0.0.19","CustomerCode":"w","Password":""} 

這裏是我的POST請求的代碼:

public void sendHttpPost() throws ClientProtocolException, IOException{ 
     HttpPost httpPostRequest = new HttpPost(url + buildParams()); 

     // add headers 
     Iterator it = headers.entrySet().iterator(); 
     Iterator itP = params.entrySet().iterator(); 
     while (it.hasNext()) { 
      Entry header = (Entry) it.next(); 
      httpPostRequest.addHeader((String)header.getKey(), (String)header.getValue()); 
     } 

     HttpClient client = new DefaultHttpClient(); 
     HttpResponse resp; 

     resp = client.execute(httpPostRequest); 

     this.respCode = resp.getStatusLine().getStatusCode(); 
     Log.i(TAG, "response code: " + getResponseCode()); 
     this.responsePhrase = resp.getStatusLine().getReasonPhrase(); 
     Log.i(TAG, "error msg: " + getErrorMsg()); 
     HttpEntity entity = resp.getEntity(); 

     if (entity != null){ 
      InputStream is = entity.getContent(); 
      //Header contentEncoding = resp.getFirstHeader("Content-encoding"); 
      //Log.i(TAG, "endoding" + contentEncoding.getValue()); 
      response = convertStreamToString(is); 
      //response = response.substring(1,response.length()-1); 
      //response = "{" + response + "}"; 
      Log.i(TAG, "response: " + response); 
      is.close(); 
     } 
    } 

我的問題是如何添加json數據到這個請求?

回答

2

下面類使用

public class RestClient 
{ 
    private ArrayList<NameValuePair> params; 
    private ArrayList<NameValuePair> headers; 

    private String url; 

    private int responseCode; 
    private String message; 

    private String response; 

    public String getResponse() 
    { 
     return response; 
    } 

    public String getErrorMessage() 
    { 
     return message; 
    } 

    public int getResponseCode() 
    { 
     return responseCode; 
    } 

    public RestClient(String url) { 
     this.url = url; 
     params = new ArrayList<NameValuePair>(); 
     headers = new ArrayList<NameValuePair>(); 
    } 

    public void AddParam(String name, String value) 
    { 
     params.add(new BasicNameValuePair(name, value)); 
    } 

    public void AddHeader(String name, String value) 
    { 
     headers.add(new BasicNameValuePair(name, value)); 
    } 

    public void Execute(RequestMethod method) throws Exception 
    { 
     switch (method) 
     { 
     case GET: 
     { 
      // add parameters 
      String combinedParams = ""; 
      if (!params.isEmpty()) 
      { 
       combinedParams += ""; 
       for (NameValuePair p : params) 
       { 
        String paramString = p.getName() + "" + URLEncoder.encode(p.getValue(),"UTF-8"); 
        if (combinedParams.length() > 1) 
        { 
         combinedParams += "&" + paramString; 
        } 
        else 
        { 
         combinedParams += paramString; 
        } 
       } 
      } 

      HttpGet request = new HttpGet(url + combinedParams); 

      // add headers 
      for (NameValuePair h : headers) 
      { 
       request.addHeader(h.getName(), h.getValue()); 
      } 

      executeRequest(request, url); 
      break; 
     } 
     case POST: 
     { 
      HttpPost request = new HttpPost(url); 

      // add headers 
      for (NameValuePair h : headers) 
      { 
       request.addHeader(h.getName(), h.getValue()); 
      } 

      if (!params.isEmpty()) 
      { 
       request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
      } 

      executeRequest(request, url); 
      break; 
     } 
     } 
    } 

    private void executeRequest(HttpUriRequest request, String url) throws Exception 
    { 

     HttpParams httpParameters = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParameters,15000); 
     HttpConnectionParams.setSoTimeout(httpParameters, 15000); 
     HttpClient client = new DefaultHttpClient(httpParameters); 

     HttpResponse httpResponse; 





      httpResponse = client.execute(request); 
      responseCode = httpResponse.getStatusLine().getStatusCode(); 
      message = httpResponse.getStatusLine().getReasonPhrase(); 

      HttpEntity entity = httpResponse.getEntity(); 

      if (entity != null) 
      { 

       InputStream instream = entity.getContent(); 
       response = convertStreamToString(instream); 

       // Closing the input stream will trigger connection release 
       instream.close(); 
      } 


    } 

    private static String convertStreamToString(InputStream is) 
    { 

     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 

     String line = null; 
     try 
     { 
      while ((line = reader.readLine()) != null) 
      { 
       sb.append(line + "\n"); 
      } 
     } 
     catch (IOException e) 
     { 

      e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       is.close(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
     return sb.toString(); 
    } 
    public InputStream getInputStream(){ 
     HttpParams httpParameters = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParameters,15000); 
     HttpConnectionParams.setSoTimeout(httpParameters, 15000); 
     HttpClient client = new DefaultHttpClient(httpParameters); 

     HttpResponse httpResponse; 

     try 
     { 

       HttpPost request = new HttpPost(url); 

      httpResponse = client.execute(request); 
      responseCode = httpResponse.getStatusLine().getStatusCode(); 
      message = httpResponse.getStatusLine().getReasonPhrase(); 

      HttpEntity entity = httpResponse.getEntity(); 

      if (entity != null) 
      { 

       InputStream instream = entity.getContent(); 
       return instream; 
      /* response = convertStreamToString(instream); 

       // Closing the input stream will trigger connection release 
       instream.close();*/ 
      } 

     } 
     catch (ClientProtocolException e) 
     { 
      client.getConnectionManager().shutdown(); 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      client.getConnectionManager().shutdown(); 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    public enum RequestMethod 
    { 
     GET, 
     POST 
    } 
} 

下面是代碼如何使用上面的類

RestClient client=new RestClient(Webservices.student_details); 
JSONObject obj=new JSONObject(); 
obj.put("StudentId",preferences.getStudentId()); 
client.AddParam("",obj.toString()); 
client.Execute(RequestMethod.GET); 
String response=client.getResponse(); 

希望這會對你有所幫助

+0

您的意思是POST或GET? – paulsm4

+0

如果你想使用post client.Execute(RequestMethod.POST); – koti

+0

什麼是Webservices.student_details?它是一個URL嗎?你還忘記了「import ...」語句嗎?特別爲NameValuePair,BasicNameValuePair,HttpGet等等。 –

1

問:如何將json數據添加到此請求中?答:設置你的內容類型,長度並寫入有效載荷。

下面是一個例子:

 
    JSONObject holder = new JSONObject(); 
    ... 
    JSONObject data = new JSONObject(); 
    ... 
    // Some example name=value pairs 
    while(iter.hasNext()) { 
     Map.Entry pairs = (Map.Entry)iter.next(); 
     String key = (String)pairs.getKey(); 
     Map m = (Map)pairs.getValue(); 

     JSONObject data = new JSONObject(); 
     Iterator iter2 = m.entrySet().iterator(); 
     while(iter2.hasNext()) { 
     Map.Entry pairs2 = (Map.Entry)iter2.next(); 
     data.put((String)pairs2.getKey(), (String)pairs2.getValue()); 
     } 
     holder.put(key, data); 
    } 
    ... 
    StringEntity se = new StringEntity(holder.toString()); 
    ... 
    httpost.setHeader("Accept", "application/json"); 
    httpost.setHeader("Content-type", "application/json"); 
    ... 
+3

這是個玩笑嗎? – Drogba

相關問題