【发布时间】:2023-03-14 11:41:01
【问题描述】:
我一直在网上寻找如何将参数传递给 RESTlet webservice,但似乎没有太多关于 RESTlet 的教程。
我想在我的 android 应用程序上发送一些从表单中收集的参数(如果我可以使用 JSON 来完成,那就太好了)。
【问题讨论】:
-
什么是 RESTlet?你的意思是 RESTful 吗?
我一直在网上寻找如何将参数传递给 RESTlet webservice,但似乎没有太多关于 RESTlet 的教程。
我想在我的 android 应用程序上发送一些从表单中收集的参数(如果我可以使用 JSON 来完成,那就太好了)。
【问题讨论】:
我解决了这个问题
服务器端
@Post
public JSONArray serverSideFunction(Representation entity)
throws JSONException {
try {
JSONObject req = (new JsonRepresentation(entity)).getJsonObject();
System.out.println(req.getString(/* filed name */));
System.out.println(req.getString(/* filed name */));
/*
* you can retrieve all the fields here
* and make all necessary actions
*/
} catch (IOException e) {
e.printStackTrace();
}
}
Android端
HttpClient client = new DefaultHttpClient();
String responseBody;
JSONObject jsonObject = new JSONObject();
try{
HttpPost post = new HttpPost(WebService_URL);
jsonObject.put("field1", ".........");
jsonObject.put("field2", ".........");
StringEntity se = new StringEntity(jsonObject.toString());
post.setEntity(se);
post.setHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setHeader("Content-type", "application/json");
Log.e("webservice request","executing");
ResponseHandler responseHandler = new BasicResponseHandler();
responseBody = client.execute(post, responseHandler);
/*
* You can work here on your responseBody
* if it's a simple String or XML/JSON response
*/
}
catch (Exception e) {
e.printStackTrace();
}
希望对你有帮助
【讨论】:
HTTPPost 的实例的原因。希望这很清楚跨度>
事实上,这取决于你想做什么。使用 REST(参见http://en.wikipedia.org/wiki/Representational_state_transfer),有两种方法可以传递参数或数据。在你需要了解一些概念之前:
Restlet 为 REST 元素提供 Java 实体。
因此,在描述之后,您可以看到传递数据或参数取决于您的用例:
1°) 是否要更新资源状态?在这种情况下,您将通过 POST 或 PUT 等方法使用请求的内容。数据结构不受文本、JSON、XML 或二进制文件的影响……Restlet 提供了 ClientResource 类来执行 RESTful 应用程序上的请求。它还支持构建表示以发送和从接收到的数据中提取数据。在这种情况下,您从表单中收集的数据将用于构建表示。以下是一些示例:
//Samples for POST / PUT
ClientResource cr = new ClientResource("http://...");
cr.post(new StringRepresentation("test"));
MyBean bean = new MyBean();
(...)
//Jackson is a tool for JSON format
JacksonRepresentation<MyBean> repr
= new JacksonRepresentation<MyBean>(bean);
cr.put(repr);
//Samples for GET
Representation repr1 = cr.get();
bean = (new JacksonRepresentation<MyBean>(repr1, MyBean.class)).getObject();
2°) 你想在你的 GET 请求中指定参数(例如配置数据来检索等等)吗?在这种情况下,您可以简单地将其添加到 ClientResource,如下所述:
ClientResource cr = new ClientResource("http://...");
cr.getReference().addQueryParameter("q", "restlet");
Representation repr = cr.get();
在这种情况下,您从表单中收集的数据将用于构建参数。
希望对您有所帮助。 蒂埃里
【讨论】:
如果您希望请求具有 json 结构并且您的响应为 JSONObject,也许您可以在服务器端这样做:
public class RequestJSON extends ServerRecource{
@Post("json")
public JSONObject testRequest(String entity){
JSONObject request = new JSONObject(entity);
String value1 = request.getString("key1");
int value2 = request.getInt("key2");
return /* your JSONObject response */;
}
}
您的要求可以是:
{"key1":"value1", "key2":value2}
希望对你有帮助
【讨论】: