1

jax-rs Response を json 文字列にシリアライズしようとしています。

サーバーからの応答はjsonで、ジャージークライアントから次のように取得します。

Response resp = target.request().method("PUT", Entity.json(payloadBean))

ここで、payloadBean は私の json リクエストです。すべて正常に動作しますが、ログに記録するために JSON 文字列の resp を変換できません。

私が試してみると:

String s = EntityUtils.toString((HttpEntity) resp.getEntity());

私は得る:

org.glassfish.jersey.client.internal.HttpUrlConnector cannot be cast to org.apache.http.HttpEntity

ちなみに、HttpEntityにキャストしないと、コンパイラは次のように言います:

toString (org.apache.http.HttpEntity) in EntityUtils cannot be applied to (java.lang.Object).

私の関連するインポートは次のとおりです。

import org.apache.http.HttpEntity;
import org.apache.http.util.EntityUtils;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;

何か案は?

4

2 に答える 2

5

使用するresp.readEntity(String.class)

public abstract <T> T readEntity(Class<T> entityType)

タイプ パラメータ: T - エンティティ インスタンスの Java タイプ。

パラメータ: entityType - エンティティのタイプ。

要求された型へのメッセージ エンティティ ストリームのマッピングをサポートする MessageBodyReader を使用して、指定された Java 型のインスタンスとしてメッセージ エンティティ入力ストリームを読み取ります。

于 2016-01-19T09:50:38.207 に答える
3

最後に、ストリームが消費されたため、メッセージ エンティティ データをバッファリングする必要があり、後で応答を再読み取りしようとしたときにエラーが発生しました。したがって、最初にログに記録してから再度使用するには、次のことを行う必要がありました。

resp.bufferEntity();  //need to buffer entity, in order to read the entity multiple times from the Response's InputStream
String s = resp.readEntity(String.class);
于 2016-01-20T10:09:02.680 に答える