如何在JAX-RS客户端中记录请求主体



我需要与客户端JAX-RS请求一起查看我的请求主体,以验证序列化工作是否正确,并重复使用邮递员的请求。

我知道可以使用例如resource.addFilter(new com.sun.jersey.api.client.filter.LoggingFilter());激活与泽西岛的记录。但是,我不直接使用球衣或Resteasy实施,而是通过JAX-RS API进行抽象:

final WebTarget target = 
        ClientBuilder.newBuilder().build().target("http://localhost:8080");

如何在此处启用登录?


结果

@peeskillet 此片段的答案。

但是,有时摘要中的close()方法不会被JAX-RS实现(在这种情况下为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。

更新

另请参阅:

  • JAX-RS 2打印JSON请求,用于完整/更好的实现。

最新更新