我需要查看带有客户端JAX-RS请求的请求主体,以验证序列化工作正确并针对Postman之类的测试客户端重用该请求。
我知道可以使用resource.addFilter(new com.sun.jersey.api.client.filter.LoggingFilter());
激活Jersey的日志记录。但是,我不直接使用Jersey或RESTEasy实现,而是通过JAX-RS API进行抽象:
final WebTarget target =
ClientBuilder.newBuilder().build().target("http://localhost:8080");
如何在此处启用日志记录?
结果
The answer from @peeskillet + this snippet。
但是,有时JAX-RS实现不会调用摘录中的
close()
方法(在这种情况下为org.jboss.resteasy:resteasy-client-3.0.11.FINAL
)。
最佳答案
JAX-RS 2.0(看起来像您正在使用的)具有 ClientRequestFilter
。您可以使用Client
甚至WebTarget
注册它。通过filter
方法,您可以获取实体,并进行日志记录
public class LoggingFilter implements ClientRequestFilter {
private static final Logger LOG = Logger.getLogger(LoggingFilter.class.getName());
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
LOG.log(Level.INFO, requestContext.getEntity().toString());
}
}
[...]
Client client = ClientBuilder.newClient();
client.register(new LoggingFilter());
另外,您可能会发现有趣的其他商品的
ClientRequestContext
API。更新
另请参见:
关于logging - 如何在JAX-RS客户端中记录请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30187514/