Джерси: Распечатать фактический запрос

Как я могу просмотреть фактический запрос, который Джерси генерирует и отправляет на сервер? У меня возникли проблемы с конкретным запросом, и тот, кто работает с веб-сервером, попросил просмотреть полный запрос (с заголовками и такими).

Если вы используете 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. На моей машине оба записываются в журнал.

  • Java RestFull WebService: реализация JAX-RS с использованием библиотек Jersey 2.3.1
  • Jersey Exception: SEVERE: читатель тела сообщения для classа Java
  • Перечисление всех развернутых конечных точек restа (весенняя загрузка, трикотаж)
  • java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
  • Как настроить сериализацию списка объектов JAXB для JSON?
  • Поймать все Исключения, а также вернуть пользовательские ошибки в Джерси
  • Отображение сервлета Джерси / * вызывает ошибку 404 для статических ресурсов
  • MessageBodyWriter не найден для типа media = application / json
  • Джерси с Struts2
  • MULTIPART_FORM_DATA: не найден источник инъекции для параметра типа public javax.ws.rs.core.Response
  • Джерси: верните список строк
  • Давайте будем гением компьютера.