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

时间:2012-10-22 04:51:33

标签: java android web-services

我想用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":""}

这是我的帖子请求代码:

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 个答案:

答案 0 :(得分:3)

使用以下课程

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

希望这会对你有所帮助

答案 1 :(得分: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");
    ...