tutorial restful jax consumes java json jersey jax-rs jersey-2.0

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.

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.