【问题标题】:how to pass parameters to RESTlet webservice from android?如何从android将参数传递给RESTlet webservice?
【发布时间】:2023-03-14 11:41:01
【问题描述】:

我一直在网上寻找如何将参数传递给 RESTlet webservice,但似乎没有太多关于 RESTlet 的教程。

我想在我的 android 应用程序上发送一些从表单中收集的参数(如果我可以使用 JSON 来完成,那就太好了)。

【问题讨论】:

  • 什么是 RESTlet?你的意思是 RESTful 吗?
  • Restlet 是一个用于 Java 平台的轻量级、综合性、开源 REST 框架。你可以查看linklink了解更多关于restlet的信息

标签: android json restlet


【解决方案1】:

我解决了这个问题

服务器端

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

希望对你有帮助

【讨论】:

  • 很好的例子,但是你在哪里传递了 WCF 方法名?
  • 方法名称仅用于 SOAP Web 服务(如 WCF)这是一个休息客户端。通信通过 URL 和 CRUD 请求方法完成
  • 即使是URL,调用的时候不会绑定URL后面的方法名吗?
  • 就像我说的那样,这是在使用 SOAP 时完成的。对于 Rest,我们使用请求方法检查此 link 以了解更多信息。例如,在此示例中,我们使用 POST 作为请求方法,这就是我使用 HTTPPost 的实例的原因。希望这很清楚跨度>
【解决方案2】:

事实上,这取决于你想做什么。使用 REST(参见http://en.wikipedia.org/wiki/Representational_state_transfer),有两种方法可以传递参数或数据。在你需要了解一些概念之前:

  • 资源:REST 实体本身。
  • Representation:对应其状态,可以使用不同的HTTP方法获取或更新。使用内容类型标头(Restlet 中的媒体类型)标识内容的类型。
  • 方法:GET 方法用于获取资源状态,PUT 用于更新它,POST 用于创建新资源并同时指定其状态,DELETE 用于删除资源。

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

在这种情况下,您从表单中收集的数据将用于构建参数。

希望对您有所帮助。 蒂埃里

【讨论】:

    【解决方案3】:

    如果您希望请求具有 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}
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2016-11-04
      • 2011-07-23
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多