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

How to log request body in JAX-RS client

我需要查看带有客户端 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");

如何在此处启用日志记录?


结果

+ 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 您可能会感兴趣的一些其他好东西。

更新

另请参阅:

  • ,用于 complete/better 实施。