web-dev-qa-db-ja.com

Responseパラメータを持つメソッド内のIllegalStateException

エンティティメソッドを読み取る応答をテストする簡単なクラスを作成しました(期待どおりに機能する場合)。しかし、うまくいきませんでした。

クラスを起動すると、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)

そして、これが私が書いたコードです

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

何が悪いのですか?

15
VanDavv

Responseesには、インバウンドとアウトバウンドの2種類がありますが、同じインターフェースを使用しています。アウトバウンドは、サーバーから応答を送信するときです

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

インバウンドとは、クライアント側で応答を受信するときです。

_Response response = webTarget.request().get();
_

readEntityメソッドは、必要がないため、サーバー側のアウトバウンド応答では無効になっています。これは、応答ストリームからの応答を_de_serializeする必要がある場合にのみ使用されます。ただし、アウトバウンドの場合はありません。

アウトバウンド応答にエンティティが必要な場合は、 Response#getEntity() を使用するだけです

29
Paul Samsotha