How to send json data to POST restful service

61,804

Solution 1

Use below class

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
    }
}

Here is the code how to use above class

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();

Hope this will help you

Solution 2

Q: how to add json data to this request?

A: Set your content type, length and write the payload.

Here's an example:

    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");
    ...
Share:
61,804
Ankit HTech
Author by

Ankit HTech

Updated on April 23, 2020

Comments

  • Ankit HTech
    Ankit HTech about 4 years

    I want to call a rest webservice with POST method.Below is the service url and its parameters which I need to pass

     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":""}
    

    Here is my post request code:

    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();
            }
        }
    

    My question is how to add json data to this request??

  • koti
    koti over 11 years
    if u want use post client.Execute(RequestMethod.POST);
  • Mohsen Abasi
    Mohsen Abasi almost 7 years
    What is Webservices.student_details? Is it a URL? And also did you forget "import ..." statements? Specially for NameValuePair, BasicNameValuePair, HttpGet,...etc.
  • Krishna
    Krishna almost 7 years
    really comprehensive answer!