2014-11-23 13 views
6

Ich möchte mit org.glassfish.jersey Umsetzung Json serizalizeSerialize javax.ws.rs Entity JSon

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

Diese Karte auf Nicht-Standard-Serialisierung { foo: "bar" }. Ich möchte dieses Verhalten im Komponententest testen.

Antwort

4

Sie können nicht so testen. Was Sie hier

Response response = Response.status(Response.Status.OK) 
          .entity(entity) 
          .type(MediaType.APPLICATION_JSON).build(); 

tun, ist eine Outbound Antwort zu bauen. Nachdem wir im JAX-RS-Rahmen eine Antwort gesendet haben, z.

@GET 
@Produced(MediaType.APPLICATION_JSON) 
public Response getResponse() { 
    ... 
    return Response.status(Response.Status.OK) 
        .entity(entity) 
        .type(MediaType.APPLICATION_JSON).build(); 
} 

es muss noch eine MessageBodyWriter für die Serialisierung zu JSON durch.

aber sagen, dass hat Jersey ein Test Framework, können wir unsere Ressourcen Methoden zu testen. Sie können alle offiziellen Beispiele at the Github

Eine Probe (mit einigen Änderungen) finden:

Diese Mindest sind erforderlich Maven Abhängigkeiten

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

Prüfklasse

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 bietet die MessageBodyWriter und MessageBodyReader für r die Verarbeitung von JSON, das implizit für uns registriert ist.

+0

Danke, grizzly2 Anbieter Rückkehr Standard '{ "foo": "bar"}' statt meiner '{foo: "bar"}' – MariuszS

+0

Ok, mit 2.6 in diesem Bericht InternalServerErrorException ... – MariuszS

+0

Jersey 2.6 Beispiel Mein Code gewonnen nicht mal kompilieren. Wenn Sie weitere Hilfe benötigen, müssen Sie weitere Informationen in Ihren Beitrag aufnehmen, damit wir Ihnen helfen können, d. H. Ein vollständiges Beispiel (mit Abhängigkeiten), das das Problem verursacht. 'InternalServerErrorException' Serverfehler könnte irgendetwas bedeuten –

Verwandte Themen