java Jersey:打印实际请求

sbdsn5lh  于 2023-03-06  发布在  Java
关注(0)|答案(5)|浏览(255)

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

7gs2gvoe

7gs2gvoe1#

如果您只是使用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);

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

gv8xihay

gv8xihay2#

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

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

2hh7jdfx

2hh7jdfx3#

@ivan.cikic的答案是针对Jersey 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实用程序日志记录。如果它能让我控制日志记录器就更好了。看起来像是设计上的倒退。

jfgube3f

jfgube3f4#

所有这些答案都很接近,但是它们缺少记录请求和响应主体的设置,至少在Jersey 2.30.1中,我是这样完成记录请求和响应的,包括它们各自的主体:

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

从技术上讲,Level.All8192的值可以是null,我在这里提供它们只是为了简洁。

mhd8tkvw

mhd8tkvw5#

对于版本3.1.X,必须为:

Logger logger = Logger.getLogger("test");
LoggingFeature loggingFeature = new LoggingFeature(logger, Level.INFO, Verbosity.PAYLOAD_ANY,null);
Client client = ClientBuilder.newClient();
client.register(loggingFeature);

级别。全部不工作

相关问题