restful - jersey java post json
Serialize javax.ws.rs Entity to json (1)
Quiero serizalizar a Json con la implementación de org.glassfish.jersey
Map<String, String> entity = Maps.newHashMap();
entity.put("foo", "bar");
Response response = Response.status(Response.Status.OK)
.entity(entity)
.type(MediaType.APPLICATION_JSON).build();
System.out.println(response.getEntity());
Este mapa se serializa a no estándar { foo: "bar" }
. Quiero probar este comportamiento en la prueba unitaria.
No puedes probar así. Qué estás haciendo aquí
Response response = Response.status(Response.Status.OK)
.entity(entity)
.type(MediaType.APPLICATION_JSON).build();
está construyendo una respuesta de salida . En el marco JAX-RS, después de enviar una respuesta, por ejemplo
@GET
@Produced(MediaType.APPLICATION_JSON)
public Response getResponse() {
...
return Response.status(Response.Status.OK)
.entity(entity)
.type(MediaType.APPLICATION_JSON).build();
}
todavía necesita hacerlo a través de MessageBodyWriter
para la serialización a JSON.
- Leer más sobre los proveedores de entidades
Dicho esto, Jersey tiene un marco de prueba , que podemos utilizar para probar nuestros métodos de recursos. Puedes encontrar todos los ejemplos oficiales en el Github
Una muestra (con algunas modificaciones):
Estas son las dependencias de Maven requeridas como mínimo
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.test-framework</groupId>
<artifactId>jersey-test-framework-core</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.13</version>
</dependency>
</dependencies>
Clase de prueba
public class TestJSONResource extends JerseyTest {
@Override
protected TestContainerFactory getTestContainerFactory() {
return new GrizzlyTestContainerFactory();
}
@Path("test")
public static class TestResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getJson() {
Map<String, String> entity = Maps.newHashMap();
entity.put("foo", "bar");
Response response = Response.status(Response.Status.OK)
.entity(entity)
.type(MediaType.APPLICATION_JSON).build();
return response;
}
}
@Override
protected DeploymentContext configureDeployment() {
return DeploymentContext.builder(new ResourceConfig(TestResource.class))
.contextPath("context1/context2")
.build();
}
@Test
public void testGet() {
final WebTarget target = target("test");
final String s = target.request().get(String.class);
System.out.println(s);
}
}
jersey-media-json-jackson
proporciona MessageBodyWriter
y MessageBodyReader
para procesar JSON, que está registrado implícitamente para nosotros.