2009-08-29 17 views
5

En primer lugar, lo que quería saber es lo que estoy haciendo es la forma correcta de hacerlo.Restlet implementando la publicación con json recibe y responde

Tengo un escenario en el que tengo que recibir una solicitud json y tengo que actualizar la base de datos con eso, una vez que se actualice la base de datos tengo que responder de nuevo con el reconocimiento json.

lo que he hecho hasta ahora es crear la aplicación que se extiende la clase de la siguiente manera:

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

Mi clase de recurso está ampliando el ServerResource y tengo el siguiente método en mi clase de recurso

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

Mi primera preocupación es que el objeto que recibo en la entidad es inputrepresentation, así que cuando obtengo el jsonobject de la jsonrepresentation created siempre obtengo un objeto vacío/nulo.

que han intentado pasar la solicitud JSON con el siguiente código, así como el cliente conectado

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

de cliente utilizado para llamar a

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

Cualquier ayuda o pistas sobre esto se agradece altura?

Gracias, Rahul

+0

considerar pedir a esta pregunta en la página oficial Restlet-discutir foro: http: // restl et.tigris.org/ds/viewForumSummary.do?dsForumId=4447 –

Respuesta

1

Cuando utilizo el siguiente JSON con la solicitud, funciona:

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

note las comillas dobles y dos puntos adicionales que no están en su muestra.

1

Utilizando sólo 1 JAR JSE-xyz/lib/org.restlet.jar, se podría construir JSON con la mano en el lado del cliente para pedidos simples:

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

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

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

En el lado del servidor, utilizando sólo 2 - JAR GSON-xyzjar y JSE-xyz/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); 
    } 
} 
Cuestiones relacionadas