how to pass parameters to RESTlet webservice from android?

我的梦境 提交于 2019-12-09 03:18:54

问题


I've been looking online for how to pass parameters to RESTlet webservice but it seem there are not much tutorial concerning RESTlet.

I would like to send some parameters gathered from a form on my android application (it would be great if i could do this using JSON).


回答1:


well i solved this

as for the server side

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

as for the Android Side

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

I hope this may be of help




回答2:


In fact, it depends on what you want to do. With REST (see http://en.wikipedia.org/wiki/Representational_state_transfer), there are two ways to pass parameters or data. Before you need to understand some concepts:

  • Resource: the REST entity by itself.
  • Representation: corresponds to its state and can be gotten or updated using different HTTP methods. The kind of content is identified using the content type header (media type in Restlet).
  • Methods: the GET method is used to get the resource state, PUT to update it, POST to create a new resource and specify its state the same time, DELETE to delete a resource.

Restlet provides Java entities for REST elements.

So, after described that, you can see that passing data or parameters depends of your use case:

1°) Do you want to update the resource state? In this case, you will use the content of the request with methods like POST or PUT. The data structure is free from text, JSON, XML or binary... Restlet provides the ClientResource class to execute requests on RESTful applications. It also provides support to build the representation to send and extract data from the one received. In this case, your data gathered from a form will be used to build the representation. Here are some samples:

//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°) Do you want to specify parameters on your GET requests (for example to configure data to retreive and so on)? In this case, you can simply add it on the ClientResource, as described below:

ClientResource cr = new ClientResource("http://...");
cr.getReference().addQueryParameter("q", "restlet");
Representation repr = cr.get();

In this case, your data gathered from a form will be used to build the parameters.

Hope it helps you. Thierry




回答3:


If you want request with json structure and your response as JSONObject maybe you can do like this in server side:

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 */;
  }

}

And your request can be :

{"key1":"value1", "key2":value2}

I hope this can help you



来源:https://stackoverflow.com/questions/7330841/how-to-pass-parameters-to-restlet-webservice-from-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!