Преобразовать InboundJaxrsResponse в строку json

Я пытаюсь сериализовать ответ jax-rs на строку json.

Ответ от сервера - json, и я получаю его от клиента джерси с помощью:

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

где payloadBean - это мой запрос json. Все работает нормально, но я не могу преобразовать респ в строку json, чтобы записать его.

Если я попробую:

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;

Есть идеи?

2 ответа

Решение

Наконец, мне нужно было буферизовать данные сущности сообщения, так как поток использовался, и позже я получал ошибку, когда пытался перечитать ответ. Таким образом, чтобы сначала зарегистрировать его, а затем снова использовать, мне пришлось:

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

Использование resp.readEntity(String.class)

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

Параметры типа: T экземпляр типа Java.

Параметры: entityType - тип объекта.

Считайте входной поток объекта сообщения как экземпляр указанного типа Java, используя MessageBodyReader, который поддерживает отображение потока объекта сообщения на запрошенный тип.

Другие вопросы по тегам