Реализация поста рестлета с помощью json receive и response - PullRequest
5 голосов
/ 29 августа 2009

Во-первых, я хотел знать, что я делаю, это правильный способ сделать это.

У меня есть сценарий, в котором я получу запрос json, и мне нужно будет обновить базу данных с этим, как только БД обновится, я должен ответить с подтверждением json.

На данный момент я создал приложение для расширения классов следующим образом:

     @Override  
     public Restlet createRoot() {  
         // Create a router Restlet that routes each call to a  
         // new instance of ScanRequestResource.  
         Router router = new Router(getContext());  

         // Defines only one route  
         router.attach("/request", RequestResource.class);  

         return router;  
     }  

Мой класс ресурсов расширяет ServerResource, и у меня есть следующий метод в моем классе ресурсов

@Post("json")
public Representation post() throws ResourceException {
    try {
        Representation entity = getRequestEntity();
        JsonRepresentation represent = new JsonRepresentation(entity);
        JSONObject jsonobject = represent.toJsonObject();
        JSONObject json  = jsonobject.getJSONObject("request");

        getResponse().setStatus(Status.SUCCESS_ACCEPTED);
        StringBuffer sb = new StringBuffer();
        ScanRequestAck ack = new ScanRequestAck();
        ack.statusURL = "http://localhost:8080/status/2713";
        Representation rep = new JsonRepresentation(ack.asJSON());

        return rep;

    } catch (Exception e) {
        getResponse().setStatus(Status.SERVER_ERROR_INTERNAL);
    }

Мое первое беспокойство связано с тем, что объект, который я получаю в сущности, представляет собой inputrepresentation, поэтому, когда я выбираю jsonobject из созданного jsonrepresentation, я всегда получаю пустой / нулевой объект.

Я попытался передать запрос json со следующим кодом, а также с приложенным клиентом

function submitjson(){
alert("Alert 1");
    $.ajax({
        type: "POST",
        url: "http://localhost:8080/thoughtclicksWeb/request", 
        contentType: "application/json; charset=utf-8",
        data: "{request{id:1, request-url:http://thoughtclicks.com/status}}",
        dataType: "json",
        success: function(msg){
            //alert("testing alert");
            alert(msg);
        }
  });
};

Клиент звонил

    ClientResource requestResource = new ClientResource("http://localhost:8080/thoughtclicksWeb/request");
        Representation rep = new JsonRepresentation(new JSONObject(jsonstring));
    rep.setMediaType(MediaType.APPLICATION_JSON);
    Representation reply = requestResource.post(rep);

Любая помощь или подсказки по этому поводу высоко ценятся?

Спасибо, Рахул

Ответы [ 2 ]

1 голос
/ 29 мая 2013

Используя всего 1 JAR jse-x.y.z / lib / org.restlet.jar , вы можете вручную создать JSON на стороне клиента для простых запросов:

ClientResource res = new ClientResource("http://localhost:9191/something/other");

StringRepresentation s = new StringRepresentation("" +
    "{\n" +
    "\t\"name\" : \"bank1\"\n" +
    "}");

res.post(s).write(System.out);

На стороне сервера, используя только 2 JAR - gson-x.y.z.jar и jse-x.y.z / lib / org.restlet.jar :

public class BankResource extends ServerResource {
    @Get("json")
    public String listBanks() {
        JsonArray banksArray = new JsonArray();
        for (String s : names) {
            banksArray.add(new JsonPrimitive(s));
        }

        JsonObject j = new JsonObject();
        j.add("banks", banksArray);

        return j.toString();
    }

    @Post
    public Representation createBank(Representation r) throws IOException {
        String s = r.getText();
        JsonObject j = new JsonParser().parse(s).getAsJsonObject();
        JsonElement name = j.get("name");
        .. (more) .. .. 

        //Send list on creation.
        return new StringRepresentation(listBanks(), MediaType.TEXT_PLAIN);
    }
}
1 голос
/ 09 сентября 2009

Когда я использую следующий JSON в качестве запроса, он работает:

{"request": {"id": "1", "request-url": "http://thoughtclicks.com/status"}}

Обратите внимание на двойные кавычки и дополнительные двоеточия, которых нет в вашем образце.

...