Como posso ver a solicitação real que Jersey gera e envia ao servidor? Estou tendo problemas com uma solicitação específica e o colega que está executando o servidor da Web pediu para ver a solicitação completa (com cabeçalhos e outros semelhantes).
88
Respostas:
Se você estiver usando apenas a API Jersey Client, o LoggingFilter (filtro do cliente) deve ajudá-lo:
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);
Caso contrário, você pode registrar novamente a solicitação e a resposta no servidor usando outro LoggingFilter (filtro de contêiner).
fonte
addFilter
método não existe em Jersey 2.x. Como você usa isso agora?Desde a Jersey 2.23 , há um que
LoggingFeature
você pode usar. O exemplo a seguir é um pouco simplificado. Observe que você também pode registrar o recursoWebTarget
.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
diz que a requisição "e / ou" a resposta é registrada rs. Na minha máquina, ambos estão logados.fonte
A resposta de @ ivan.cikic é para Jersey 1.x. Veja como fazer em 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());
Isso é irrelevante, mas eu só tenho que reclamar: o novo
LoggingFilter
é realmente irritante porque força você a usar o Java Util Logging. Seria melhor se isso me desse controle sobre o logger. Parece um retrocesso no design.fonte
LoggingFilter(Logger logger, boolean PrintEntity)
construtor, mas mesmo ele não imprime cookies.LoggingFeature
não imprime nada eLoggingFilter
imprime ... 🤷♂️Todas essas respostas são bem parecidas, mas não possuem a configuração para registrar o corpo da solicitação e da resposta. Pelo menos com o Jersey 2.30.1 é assim que eu registro a solicitação e a resposta, incluindo seus respectivos corpos:
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();
Tecnicamente, os valores
Level.All
e8192
podem sernull
. Eu apenas os forneço aqui para ser conciso.fonte