Джерси: Распечатать фактический запрос
Как я могу просмотреть фактический запрос, который Джерси генерирует и отправляет на сервер? У меня возникли проблемы с конкретным запросом, и тот, кто работает с веб-сервером, попросил просмотреть полный запрос (с заголовками и такими).
- Джерси ClientResponse.getEntity общего типа
- Как реализовать службу JAX-RS RESTful в системе JSF
- Как POST объект JSON для службы JAX-RS
- Как установить соединение и тайм-аут чтения с помощью Jersey 2.x?
- Загрузка файла вместе с другим объектом на веб-сервисе в Джерси.
- безопасность и управление сеансом
- Какие объекты можно вводить с помощью annotations @Context?
- Как избежать OutOfMemoryError при загрузке большого файла с помощью клиента Jersey
Если вы используете 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 (контейнерный фильтр).
@ ivan.cikic отвечает за Джерси 1.x. Вот как вы это делаете в Jersey 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. Было бы лучше, если бы он дал мне контроль над регистратором. Это похоже на шаг назад в дизайне.
Начиная с Jersey 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 of LoggingFeature
говорит, что запрос «и / или» ответ регистрируется lol. На моей машине оба записываются в журнал.