как передать параметры в веб-сервис RESTlet с Android? - PullRequest
3 голосов
/ 07 сентября 2011

Я искал в Интернете, как передать параметры в веб-сервис RESTlet, но, похоже, не так много учебников по RESTlet.

Я хотел бы отправить некоторые параметры, собранные из формы, в моем приложении для Android (было бы здорово, если бы я мог сделать это с помощью JSON).

Ответы [ 3 ]

5 голосов
/ 08 сентября 2011

хорошо, я решил это

для серверной части

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

Я надеюсь, что это может помочь

2 голосов
/ 08 сентября 2011

На самом деле, это зависит от того, что вы хотите сделать.С помощью REST (см. http://en.wikipedia.org/wiki/Representational_state_transfer), существует два способа передачи параметров или данных. Прежде чем вам нужно понять некоторые понятия:

  • Ресурс: сам объект REST.
  • Представление: соответствует его состоянию и может быть получено или обновлено с использованием различных методов HTTP. Вид содержимого определяется с помощью заголовка типа содержимого (тип носителя в Restlet).
  • Методы: метод GET используется дляполучить состояние ресурса, PUT для его обновления, POST для создания нового ресурса и одновременного указания его состояния, DELETE для удаления ресурса.

Restlet предоставляет сущности Java для элементов REST.

Итак, после описанного вы можете видеть, что передача данных или параметров зависит от вашего варианта использования:

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

В этом случае ваши данные, собранные из формы, будут использованы для построения параметров.

Надеюсь, это поможет вам.Thierry

0 голосов
/ 27 апреля 2012

Если вы хотите запрос со структурой 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}

Iнадеюсь, это поможет вам

...