【问题标题】:How to send json data to POST restful service如何将 json 数据发送到 POST RESTful 服务
【发布时间】:2012-10-22 04:51:32
【问题描述】:

我想用POST方法调用一个rest webservice。下面是我需要传递的服务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数据??

【问题讨论】:

    标签: java android web-services


    【解决方案1】:

    使用下面的类

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

    希望对你有帮助

    【讨论】:

    • 如果你想使用 post client.Execute(RequestMethod.POST);
    • 什么是 Webservices.student_details?是网址吗?而且您是否忘记了“import ...”语句?专门用于 NameValuePair、BasicNameValuePair、HttpGet 等。
    • 真正全面的答案!
    【解决方案2】:

    Q:如何在这个请求中添加json数据?

    A:设置您的内容类型、长度并编写有效负载。

    这是一个例子:

    JSONObject 持有者 = new JSONObject(); ... JSONObject 数据 = 新 JSONObject(); ... // 一些示例名称=值对 而(iter.hasNext()){ Map.Entry 对 = (Map.Entry)iter.next(); 字符串键 = (String)pairs.getKey(); 映射 m = (Map)pairs.getValue(); JSONObject 数据 = 新 JSONObject(); 迭代器 iter2 = m.entrySet().iterator(); 而(iter2.hasNext()){ Map.Entry pair2 = (Map.Entry)iter2.next(); data.put((String)pairs2.getKey(), (String)pairs2.getValue()); } 持有人.put(密钥,数据); } ... StringEntity se = new StringEntity(holder.toString()); ... httpost.setHeader("接受", "application/json"); httpost.setHeader("内容类型", "应用程序/json"); ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2013-11-23
      相关资源
      最近更新 更多