2010-01-09 23 views

Respuesta

2

Aquí es un ejemplo bueno y completo de un Restlet que acepta JSON a través de POST:

Y una guía básica sobre cómo probar los servicios web RESTful con cURL:

+2

en el ejemplo, los datos todavía se contabiliza mediante el formulario estándar-URL- codificar "nombre = valor". Entonces, ¿cómo puedo ENVIAR una cadena con formato JSON {"nombre": "valor"}? – portoalet

+0

El primer enlace es muy antiguo. Muchas cosas se hacen manualmente, donde podrían haberse hecho automáticamente. ** Tenga cuidado ** –

+0

El primer enlace está muerto. – zionpi

10

Con Restlet 2, puede:

  • prueba de la entidad compatibilidad de tipo de papel @Post acceptRepresentation(Representation entity):

    @Post 
    public Representation acceptRepresentation(Representation entity) 
         throws ResourceException { 
        if (entity.getMediaType().isCompatible(MediaType.APPLICATION_JSON)) { 
         // ... 
        } 
        // ... 
    } 
    
  • o utilizar @Post con uno o dos parámetros:

    @Post("json") Representation acceptAndReturnJson(Representation entity) { 
        // ... 
    } 
    

ver a estos enlaces: (. Con Restlet 1, que tendría que probar el tipo de la entidad)

+0

Perdón por irrumpir, pero no puedo encontrar una forma sencilla de convertir JSONRepresentation en POJO. –

+0

El segundo enlace está roto. – Chloe

6

El ejemplo los vinculados a por Daniel Vassallo muestra los datos publicados usando un formulario. Esta es la forma de enviar JSON:

@Post 
public void acceptJsonRepresentation(JsonRepresentation entity) { 

    JSONObject json = null; 

    try { 
     json = entity.getJsonObject(); 
     // business logic and persistence 

    } catch (JSONException e) { 
     setStatus(Status.CLIENT_ERROR_BAD_REQUEST); 
     return; 
    } 

} 

Para probar con curl:

curl -X POST <your url> -H "Content-Type: application/json" -d '{"key" : "value"}' 

Las comillas simples ('') en torno a los datos en el comando curl son importantes.

+1

Lo siento por irrumpir, pero no puedo encontrar una forma sencilla de convertir JSONRepresentation en POJO. –

8

Al escribir esta respuesta (2 años después de su pregunta), Restlet 2.1 requiere que se cumplan las dependencias adecuadas para consumir correctamente y responder con JSON. El punto es que, aparte de la respuesta "Unsupported media type", no hay mucha información sobre lo que sucede internamente.

Para activar el tipo de medio JSON, debe incluir la dependencia a org.restlet.ext.jackson; si necesita admitir XML y JSON, debe incluir Jackson FIRST y luego org.restlet.ext.xstream, ya que XStream también es capaz de representaciones JSON, pero la implementación es bastante pobre (como se describe en documentos de repositorio, este es el orden recomendado por los autores del repositorio).

Entonces, en realidad no necesita incluir el tipo de medio en la anotación y solo necesita incluir el encabezado Content-Type adecuado en su solicitud curl, es decir:

curl -X post -H "Content-Type: application/json" http://localhost:8080/login -d @login.json 
  • donde login.json contiene la solicitud JSON real.
  • entrada está aceptando @Post método anotado LoginRequest y responder con LoginResponse, ambos capaces de XML y JSON tipos de medios

espero, esta respuesta ayude a alguien en algún momento. :-)

0
curl -u uid:4c521655 -X POST -H "Content-Type: application/json" -d "type=Big&data="{\"name\":\"test\"}"" --dump-header headers 'http://localhost:8190/appli/add' 
3

Aquí hay algunas actualizaciones con respecto a esta pregunta anterior. Restlet admite firmas de métodos que contienen frijoles. En tales casos, Restlet usará un convertidor registrado para tratar de convertir/llenar la carga recibida en una instancia de bean. Esto también es cierto al enviar contenido al cliente.

Aquí es la muestra de un método que controla una solicitud POST:

public class TestServerResource extends ServerResource { 
    @Post 
    public void test(TestBean bean) { 
     System.out.println(">> bean = " + bean.getMessage()); 
    } 
} 

El grano puede simplemente tener la siguiente estructura:

public class TestBean { 
    private String name; 
    private String message; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

Para poner en funcionamiento dicho mecanismo, simplemente puede añadir la extensión Jackson (org.restlet.ext.jackson) dentro de su classpath. El convertidor correspondiente se registrará automáticamente debajo del capó.

La solicitud rizo es simple y los datos para enviar tiene que especificarse

curl -X POST http://... -H "Content-Type: application/json" -d '{"name" : "myname","description":"my description"}' 

espero que le ayuda, Thierry