如何将json数据发送到POST restful服务

我想用POST方法调用rest webservice.Below是我需要传递的服务url及其参数

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数据添加到此请求?

使用以下课程

 public class RestClient { private ArrayList params; private ArrayList 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(); headers = new ArrayList(); } 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(); 

希望对你有帮助

问:如何将json数据添加到此请求中?

答:设置内容类型,长度并写入有效负载。

这是一个例子:

     JSONObject holder = new JSONObject();
     ...
     JSONObject data = new JSONObject();
     ...
     //一些示例名称=值对
     while(iter.hasNext()){
       Map.Entry对=(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(密钥,数据);
     }
     ...
     StringEntity se = new StringEntity(holder.toString());
     ...
     httpost.setHeader(“Accept”,“application / json”);
     httpost.setHeader(“Content-type”,“application / json”);
     ...