Jersey: Imprimir la solicitud real


¿Cómo puedo ver la solicitud real que Jersey genera y envía al servidor? Estoy teniendo problemas con una solicitud en particular y el compañero que ejecuta el servidor web pidió ver la solicitud completa (con encabezados y tal).

 82
Author: Haphazard, 2011-07-28

3 answers

Si solo estás usando Jersey Client API, LoggingFilter (client filter) debería ayudarte:

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

De lo contrario, puede volver a registrar tanto la solicitud como la respuesta en el servidor utilizando otro LoggingFilter (filtro de contenedor).

 97
Author: ivan.cikic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-05 13:07:39

@ivan.la respuesta de Cikic es para Jersey 1.x. Así es como se hace en 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());

Esto es irrelevante, pero solo tengo para quejarme: El nuevo LoggingFilter es realmente molesto porque te obliga a usar Java Util Logging. Sería mejor si me diera control sobre el leñador. Parece un paso atrás en el diseño.

 48
Author: Daniel Kaplan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-13 18:33:36

Ya que Jersey 2.23, hay un LoggingFeature usted podría utilizar. El siguiente es un ejemplo un poco simplificado, tenga en cuenta que puede registrar la función en WebTarget también.

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 dice que la solicitud "y/o" la respuesta se registra lol. En mi máquina, ambos están registrados.

 39
Author: Martin Andersson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-03 21:50:12