Как я могу просмотреть фактический запрос, который Джерси генерирует и отправляет на сервер? У меня возникли проблемы с конкретным запросом, и тот, кто работает на веб-сервере, попросил просмотреть полный запрос (с заголовками и т.д.).
Джерси: Распечатать фактический запрос
Ответ 1
Если вы используете API-интерфейс Джерси, LoggingFilter (клиентский фильтр) должны помочь вам:
Client client = Client.create();
client.addFilter(new LoggingFilter(System.out));
WebResource webResource = client.resource("http://localhost:9998/");
ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON)
.get(ClientResponse.class);
В противном случае вы можете снова зарегистрировать как запрос, так и ответ на сервере, используя другой LoggingFilter (контейнерный фильтр).
Ответ 2
@ivan.cikic ответ для Джерси 1.x. Вот как вы это делаете в Джерси 2.x:
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.filter.LoggingFilter;
import org.json.JSONException;
import org.json.JSONObject;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
...
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
client.register(new LoggingFilter());
Это не имеет значения, но мне просто нужно жаловаться: новый LoggingFilter
действительно раздражает, потому что он заставляет вас использовать Java Util Logging. Было бы лучше, если бы он дал мне контроль над регистратором. Это похоже на шаг назад в дизайне.
Ответ 3
Так как Джерси 2.23, там LoggingFeature
вы можете использовать. Ниже приведен немного упрощенный пример, обратите внимание, что вы можете зарегистрировать эту функцию на WebTarget
.
Logger logger = Logger.getLogger(getClass().getName());
Feature feature = new LoggingFeature(logger, Level.INFO, null, null);
Client client = ClientBuilder.newBuilder()
.register(feature)
.build();
Response response = client.target("https://www.google.com")
.queryParam("q", "Hello, World!")
.request().get();
JavaDoc LoggingFeature
говорит, что запрос "и/или" ответ регистрируется lol. На моей машине оба записываются в журнал.