我如何查看Jersey生成并发送到服务器的实际请求?我遇到了一个特定请求的问题,运行Web服务器的家伙要求查看完整的请求(带有标题等)。
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(容器过滤器)记录服务器上的请求和响应。
gv8xihay2#
从Jersey 2.23开始,你可以使用LoggingFeature。下面是一个简单的例子,请注意你也可以在WebTarget上注册这个特性。
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,在我的机器上,两者都被记录。
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实用程序日志记录。如果它能让我控制日志记录器就更好了。看起来像是设计上的倒退。
LoggingFilter
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.All和8192的值可以是null,我在这里提供它们只是为了简洁。
Level.All
8192
null
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);
级别。全部不工作
5条答案
按热度按时间7gs2gvoe1#
如果您只是使用Jersey Client API,LoggingFilter(客户端过滤器)应该可以帮助您:
否则,您可以再次使用其他LoggingFilter(容器过滤器)记录服务器上的请求和响应。
gv8xihay2#
从Jersey 2.23开始,你可以使用
LoggingFeature
。下面是一个简单的例子,请注意你也可以在WebTarget
上注册这个特性。LoggingFeature
的JavaDoc说请求“和/或”响应被记录LOL,在我的机器上,两者都被记录。2hh7jdfx3#
@ivan.cikic的答案是针对Jersey 1.x的,以下是在Jersey 2.x中的做法:
这是无关紧要的,但我只是 * 不得不 * 抱怨:新的
LoggingFilter
真的很烦人,因为它强迫你使用Java实用程序日志记录。如果它能让我控制日志记录器就更好了。看起来像是设计上的倒退。jfgube3f4#
所有这些答案都很接近,但是它们缺少记录请求和响应主体的设置,至少在Jersey 2.30.1中,我是这样完成记录请求和响应的,包括它们各自的主体:
从技术上讲,
Level.All
和8192
的值可以是null
,我在这里提供它们只是为了简洁。mhd8tkvw5#
对于版本3.1.X,必须为:
级别。全部不工作