Vraag Jersey: druk het daadwerkelijke verzoek af


Hoe kan ik het daadwerkelijke verzoek bekijken dat Jersey genereert en naar de server verzendt? Ik heb problemen met een bepaald verzoek en de bode die de webserver runt, heeft gevraagd om het volledige verzoek te zien (met koppen en dergelijke).


82
2017-07-28 14:29


oorsprong


antwoorden:


Als u Jersey Client API alleen gebruikt, LoggingFilter (clientfilter) zou u moeten helpen:

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

Anders kunt u zowel het verzoek als het antwoord opnieuw op de server registreren met behulp van een ander LoggingFilter (containerfilter).


96
2017-07-29 13:30



@ ivan.cikic's antwoord is voor Jersey 1.x. Hier is hoe je het doet in 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());

Dit is niet relevant, maar ik gewoon hebben klagen: het nieuwe LoggingFilter is echt vervelend omdat het je dwingt om Java Util Logging te gebruiken. Het zou beter zijn als het me de controle over de logger gaf. Het lijkt een stap terug in ontwerp.


48
2018-01-07 21:42



Sinds Jersey 2.23, er is een LoggingFeature je zou kunnen gebruiken. Het volgende is een beetje vereenvoudigd voorbeeld, houd er rekening mee dat u de functie kunt registreren WebTarget ook.

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 van LoggingFeature zegt dat het verzoek "en / of" het antwoord gelogd is lol. Op mijn computer worden beide vastgelegd.


38
2018-06-03 21:19