在 Android 的 RESTFUL Web 服务的 URL 中传递 JSON 对象?
Posted
技术标签:
【中文标题】在 Android 的 RESTFUL Web 服务的 URL 中传递 JSON 对象?【英文标题】:passing JSON object in URL of RESTFUL Web service in Android? 【发布时间】: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"
【问题讨论】:
【参考方案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()));
【讨论】:
是的......这就是我所做的......已经回答了......谢谢:)以上是关于在 Android 的 RESTFUL Web 服务的 URL 中传递 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 android 调用 RESTful Web 服务?
在 Android 的 RESTFUL Web 服务的 URL 中传递 JSON 对象?
[Go] Golang练习项目-web客服系统即时通讯websocket项目go-fly
Web App (angular)、iOS 和 Android 可以使用的安全 RESTful API