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?
Il existe deux types de Response
es, 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()