【问题标题】:passing JSON object in URL of RESTFUL Web service in Android?在 Android 的 RESTFUL Web 服务的 URL 中传递 JSON 对象?
【发布时间】:2013-10-10 13:05:56
【问题描述】:

我正在使用 JSON Restful Web 服务,我必须在服务 URL 中传递 JSON 对象。我已成功创建 JSON 对象,但当我的 URL 创建与 SERVER 的 HTTP 连接时出现异常。

下面我提到了我的网址:

 http://72.5.167.50:8084/UpdateProfileInfo?{"ProfileEditId":"917","ContactsEmail":[{"Email":"dsfs","ContactId":""}],"ContactsPhone":[{"CountryId":"+1","Type":"2","Phone":"345345"}],"ProfileId":"290","LastName":"demo","GroupId":"1212","Title":"sdf","City":"dsf","TemplateId":"1212","State":"dsf","AuthCode":"9bcc6f63-2050-4c5b-ba44-b8103fbc377a","Address":"sdf","FirstName":"demo","ContactId":"","Zip":"23","Company":"tv"}

在代码中获取java.lang.IllegalArgumentException: Illegal character in query

int TIMEOUT_MILLISEC = 100000; // 1000 milisec = 1 seconds
int SOCKET_TIMEOUT_MILISEC = 120000; // 2 minutes
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, SOCKET_TIMEOUT_MILISEC);
HttpClient client = new DefaultHttpClient(httpParams);
HttpPost request = new HttpPost(url);
HttpResponse response = client.execute(request);
responseString = request(response);

如果我的网址有问题,请建议我。

*已编辑:*尝试使用密钥仍然得到异常:

http://72.5.167.50:8084/UpdateProfileInfo?profileinof={"ProfileEditId":"917","ContactsEmail":[{"Email":"sdf","ContactId":""}],"ContactsPhone":[{"CountryId":"+1","Type":"2","Phone":"345345345"}],"ProfileId":"290","LastName":"demo","GroupId":"1212","Title":"dsf","City":"dsf","TemplateId":"1212","State":"dsf","AuthCode":"d968273a-0110-461b-8ecf-3f9c456d17ac","Address":"dsf","FirstName":"demo","ContactId":"","Zip":"23","Company":"tv"}

【问题讨论】:

    标签: android json restful-url


    【解决方案1】:

    我们需要为这种请求发出不同格式的 HTTP 请求。

    我在下面提到了我的代码。

    public JSONObject getJSONObject(){
    
    
        return jsonObj;
        }
    

    ABove 方法返回一个 JSON 字符串,它在下面的方法中传递。

    public static HttpResponse makeRequest(String url) throws Exception 
    {
        //instantiates httpclient to make request
        DefaultHttpClient httpclient = new DefaultHttpClient();
    
        //url with the post data
        HttpPost httpost = new HttpPost(url);
    
        //convert parameters into JSON object
        JSONObject holder = getJSONObject();
        //passes the results to a string builder/entity
        StringEntity se = new StringEntity(holder.toString());
        //sets the post request as the resulting string
        httpost.setEntity(se);
        httpost.setHeader("Accept", "application/json");
        httpost.setHeader("Content-type", "application/json");
    
        //Handles what is returned from the page 
        ResponseHandler responseHandler = new BasicResponseHandler();
        return httpclient.execute(httpost, responseHandler);
    }
    

    堆栈帖子帮助我完成了这项任务......!!!

    【讨论】:

      【解决方案2】:

      IP 不正确。

      IP 由 4 个字节组成。每个字节是一个从 0 到 255 的值,不能是 7000。

      http://7232.25.1617.50:1084

      编辑:好的,您编辑了您的问题。您正在发送 JSON 作为参数。但是这个参数没有“key”。

      应该是:

      /UpdateProfileInfo?info={"ProfileEditId":"917",[.......]

      编辑:我认为应该是这样的:

      /UpdateProfileInfo?info="{'ProfileEditId':'917',[.......]}"

      注意该值被"包围,内部"现在被'替换

      【讨论】:

      • @Sam-In-TechValens 我已经编辑了我的答案。再次检查。无论如何你应该使用yanchenko提供的答案,因为get参数有字符限制,而POST没有。
      【解决方案3】:

      问题可能是您尝试将 JSON 对象作为 url 参数发布。
      如果它真的必须是一个 url 参数,它必须是 urlencoded
      如果它应该是一个普通的 POST 请求,我建议使用high level helper:

      new RESTClient2(ctx).post("http://72.5.167.50:8084", jsonObject);
      

      【讨论】:

        【解决方案4】:

        我可以看到需要使用 POJO,将它们转换为 JSON 字符串并通过 HTTP 传送该字符串信息。有很多好的 android/java/apache/volley 类型库允许这样做。

        但是,我不明白,实际上我不同意您使用 GET 和 URL 参数来传输 JSON 字符串的要求?

        执行以下操作真的很容易:

        POJO -> 到 JSON -> toString -> 到 http.string.entity -> POST

        为什么不重新检查您的架构并考虑使用 POST 而不是 GET。

        然后很简单,两步:

        example"request.setEntity(..."

        您的代码将如下所示:

        httpPost.setEntity(new StringEntity(pojo.toJSON().toString()));
        

        【讨论】:

        • 是的......这就是我所做的......已经回答了......谢谢:)
        猜你喜欢
        • 2012-07-20
        • 1970-01-01
        • 2012-01-07
        • 1970-01-01
        • 2014-09-01
        • 1970-01-01
        • 2017-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多