web-dev-qa-db-fra.com

Jersey: Imprimer la demande réelle

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).

83
Haphazard

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).

99
ivan.cikic

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.

49
Daniel Kaplan

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.

48
Martin Andersson