web-dev-qa-db-fra.com

IllegalStateException dans la méthode avec le paramètre Response

J'ai écrit une classe simple pour tester la méthode d'entité de lecture de réponse (si cela fonctionne comme je l'attends). Mais cela n'a pas bien fonctionné.

Lorsque je lance ma classe, j'obtiens l'erreur suivante dans response.readEntity():

Exception in thread "main" Java.lang.IllegalStateException: Method not supported on an outbound message.  
  at org.glassfish.jersey.message.internal.OutboundJaxrsResponse.readEntity(OutboundJaxrsResponse.Java:150)

Et voici le code que j'ai écrit

public static void main(String[] args) {
        List<Entity> representations = new ArrayList<>();
        representations.add(new Entity("foo", "baz", false));
        representations.add(new Entity("foo1", "baz1", true));
        representations.add(new Entity("foo2", "baz2", false));
        Response build = Response.ok(representations).build();
        printEntitesFromResponse(build);
    }

public static void printEntitesFromResponse(Response response) {
        response
                .readEntity(new GenericType<List<Entity>>() {})
                .stream()
                .forEach(entity -> System.out.println(entity));
    }

Qu'est-ce que je fais mal?

15
VanDavv

Il existe deux types de Responsees, entrants et sortants, bien qu'ils utilisent toujours la même interface. Sortant, c'est lorsque vous envoyez une réponse du serveur

Response response = Response.ok(entity).build();

L'entrée se produit lorsque vous recevez la réponse côté client.

Response response = webTarget.request().get();

La méthode readEntity est désactivée sur la réponse sortante côté serveur, car vous n'en avez pas besoin. Il n'est utilisé que lorsque vous avez besoin de _de_sérialiser la réponse du flux de réponses. Mais il n'y en a pas quand il est sortant.

Si vous voulez l'entité sur la réponse sortante, utilisez simplement Response#getEntity()

29
Paul Samsotha