Comment puis-je voir la demande réelle que Jersey génère et envoie au serveur? J'ai des problèmes avec une requête particulière et le responsable du serveur Web a demandé à voir la requête complète (avec les en-têtes et autres).
Si vous utilisez uniquement l'API client Jersey, LoggingFilter (filtre client) devrait vous aider à:
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);
Sinon, vous pouvez à nouveau enregistrer la demande et la réponse sur le serveur en utilisant un autre LoggingFilter (filtre de conteneur).
La réponse de @ ivan.cikic est pour Jersey 1.x. Voici comment vous le faites dans 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());
Cela n’a aucune importance, mais je viens have de me plaindre: le nouveau LoggingFilter
est vraiment gênant car il vous oblige à utiliser Java Util Logging. Ce serait mieux si cela me donnait le contrôle de l’enregistreur.
Depuis Jersey 2.23 , il existe un LoggingFeature
que vous pouvez utiliser. Voici un exemple un peu simplifié. Veuillez noter que vous pouvez également enregistrer la fonctionnalité sur 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 de LoggingFeature
indique que la demande "et/ou" la réponse est enregistrée lol. Sur ma machine, les deux sont enregistrés.