首页 文章

Jersey :打印实际请求

提问于
浏览
82

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

3 回答

  • 97

    如果您只是使用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(容器过滤器)再次在服务器上记录请求和响应 .

  • 39

    @ 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 Util Logging . 如果它让我控制 Logger 会更好 . 似乎在设计上倒退了一步 .

  • 48

    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表示请求"and/or"响应被记录lol . 在我的机器上,两者都被记录下来 .

相关问题