Як я можу переглянути фактичний запит, який Джерсі генерує та надсилає на сервер? У мене проблеми з певним запитом, і колега, що працює на веб-сервері, попросив переглянути повний запит (із заголовками та подібними).
Як я можу переглянути фактичний запит, який Джерсі генерує та надсилає на сервер? У мене проблеми з певним запитом, і колега, що працює на веб-сервері, попросив переглянути повний запит (із заголовками та подібними).
Відповіді:
Якщо ви просто використовуєте Jersey Client 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 (контейнерний фільтр).
addFilter
метод не існує в Джерсі 2.x. Як ти зараз цим користуєшся?
Починаючи з Джерсі 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. На моїй машині обидва реєструються.
Відповідь @ 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. Було б краще, якби це дало мені контроль над реєстратором. Здається, це крок назад у дизайні.
LoggingFilter(Logger logger, boolean PrintEntity)
конструктор, але навіть це не друкує файли cookie.
LoggingFeature
нічого не друкує, а LoggingFilter
друкує ... 🤷♂️
Усі ці відповіді досить близькі, але їм не вистачає параметрів для реєстрації запиту та тіла відповіді. Принаймні з Jersey 2.30.1 ось як я виконую реєстрацію запиту та відповіді, включаючи їх відповідні органи:
import javax.ws.rs.client.ClientBuilder;
import org.glassfish.jersey.logging.LoggingFeature;
import java.util.logging.Level;
import java.util.logging.Logger;
Logger logger = Logger.getLogger("LoggingFeature");
logger.setLevel(Level.ALL);
ClientBuilder.newClient()
.target("https://www.example.com")
.register(new LoggingFeature(
logger,
Level.ALL,
LoggingFeature.Verbosity.PAYLOAD_ANY,
8192))
.request()
.get();
Технічно значення Level.All
і 8192
можуть бути null
. Я просто пропоную їх тут, щоб вони були стислими.