泽西岛:打印实际的请求

我如何查看Jersey生成并发送到服务器的实际请求? 我有一个特定的请求的问题和运行Web服务器的人要求查看完整的请求(与标题等)。

如果您只是使用Jersey Client API, LoggingFilter (客户端filter)应该可以帮助您:

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

否则,您可以使用其他LoggingFilter (容器filter)在服务器上再次logging请求和响应。

@ ivan.cikic的答案是泽西1.x. 在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()); 

这是不相关的,但我只需要抱怨:新的LoggingFilter真的很烦人,因为它迫使您使用Java Util日志logging。 如果它让我控制logging器会更好。 似乎在devise上倒退了一步。

泽西岛2.23以来,有一个可以使用的LoggingFeature 。 以下是一个简单的例子,请注意,您也可以在WebTarget上注册该function。

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

LoggingFeature JavaDoc说,请求“和/或”的响应loginlol。 在我的机器上,两者都被logging。