serialización del objeto a json en el cuerpo de solicitud tranquilo

Estoy haciendo una API de descanso usando estar tranquilo, y probarlo con Está seguro.

Digamos que tengo una clase, message, con una propiedad text.

@XmlRootElement
public class message {
  @XmlElement
  public String text;
}

La siguiente prueba intentará publicar este objeto en una URL dada:

message msg = new message();
msg.text = "some message";

expect()
  .statusCode(200)
.given()
   .contentType("application/json")
   .body(msg)
.when()
  .post("/message");

El objeto msg se serializa en json y se publica, pero no de la manera que yo quiero, es decir, no de la manera que necesito descansar.

Lo que está publicado:

{ "text": "some message" }

¿Qué está funcionando?

{ "message": { "text": "some message" } }

¿Alguien tiene alguna pista sobre cómo puedo hacer que esto funcione como se esperaba?

preguntado el 22 de mayo de 12 a las 21:05

Tengo 2 preguntas para ti: ¿Cómo supiste lo que se publicó? ¿Y cómo aplicó la solución que marcó como respuesta? Gracias -

Lo siento, pero ya no tengo el código disponible para mí. Pero si no recuerdo mal, todo se reduce a los paquetes que pones a disposición. En nuestro caso usamos maven. Encontrar lo que se publicó no debería ser tan difícil. Use un proxy o un registro o lo que sea. -

2 Respuestas

Sé que ya hay una respuesta para esto, pero quiero compartir la forma en que pude enviar un objeto json. Alguien puede encontrarlo útil

// import org.json.simple.JSONObject;
JSONObject person = new JSONObject();
person.put("firstname", "Jonathan");
person.put("lastname", "Morales");

JSONObject address = new JSONObject();
address.put("City", "Bogotá");
address.put("Street", "Some street");
person.put("address", address);

String jsonString = person.toJSONString();
// {"address":{"Street":"Some street","City":"Bogotá"},"lastname":"Morales","firstname":"Jonathan"}

// import static com.jayway.restassured.RestAssured.*;
given().contentType("application/json")
       .body(jsonString)
       .expect().statusCode(200)
       .when().post("http://your-rest-service/");

respondido 20 nov., 13:15

Todavía tengo algunas dudas, creé Java hashmap y falló. Pero su solución funcionó, alguna idea de por qué podría haber fallado con el enfoque hashamp. He anidado json según tu ejemplo. - vikramvi

Hola, vikramvi, hice esto hace mucho tiempo y realmente no puedo decir qué sucede cuando uso un hashmap. - Jonathan Morales Vélez

Probablemente esté utilizando el serializador Jettison JSON incorporado con RestEasy. Jettison usa la convención XML-> Json (también conocida como BadgerFish). Reemplace Jettison con Jackson o GSon para obtener un formato JSon compatible con RestAssured.

contestado el 24 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.