泽西岛:打印实际请求

Hap*_*ard 84 java jersey

如何查看Jersey生成并发送到服务器的实际请求?我遇到了特定请求的问题,运行Web服务器的人员要求查看完整请求(带有标题等).

iva*_*kic 98

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

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);
Run Code Online (Sandbox Code Playgroud)

否则,您可以使用其他LoggingFilter(容器过滤器)再次在服务器上记录请求和响应.

  • Jersey 2.x中不存在这种`addFilter`方法.你现在怎么用? (5认同)
  • JAX-RS 2.x提供的功能与Jersey 1.x专有客户端API相同.更多细节:https://jersey.java.net/documentation/latest/user-guide.html#mig-client-api (2认同)

Dan*_*lan 50

@ 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());
Run Code Online (Sandbox Code Playgroud)

这是无关紧要的,但我只是抱怨:新LoggingFilter实在是烦人,因为它迫使你使用Java的Util记录.如果它让我控制记录器会更好.似乎在设计上倒退了一步.

  • 我知道这是一个陈旧的答案,但我有一个问题 - 您知道如何让记录器打印请求中包含的所有信息吗?特别是饼干.我使用了`LoggingFilter(Logger logger,boolean PrintEntity)`构造函数,但即使这样也不会打印cookie. (3认同)
  • LoggingFilter现在已弃用。您应该使用Martin的LoggingFeature答案。这也支持Verbosity枚举打印出不同数量的细节。它应该打印出标题,其中应包含cookie。 (2认同)

Mar*_*son 50

Jersey 2.23以来,LoggingFeature你可以使用它.以下是一个简单的示例,请注意您也可以注册该功能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();
Run Code Online (Sandbox Code Playgroud)

JavaDoc LoggingFeature表示请求"和/或"响应被记录lol.在我的机器上,都记录了.

  • @DavidBrossard使用org.glassfish.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY作为构造函数参数来控制它. (2认同)