如何在JAX-RS客户端

时间:2015-05-12 09:59:44

标签: logging jax-rs servlet-filters

我需要查看具有客户端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

但是,有时JIP-RS实现不会调用代码段中的close()方法(在这种情况下为org.jboss.resteasy:resteasy-client-3.0.11.FINAL)。

1 个答案:

答案 0 :(得分:23)

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

更新

另见: