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

tho*_*ork 14 logging jax-rs servlet-filters

我需要查看我的请求主体与客户端JAX-RS请求,以验证序列化是否正常,并重用请求测试客户端,如Postman.

我知道可以使用例如使用Jersey激活日志记录resource.addFilter(new com.sun.jersey.api.client.filter.LoggingFilter());.但是,我不直接使用Jersey或RESTEasy实现,而是通过JAX-RS API抽象:

final WebTarget target = 
        ClientBuilder.newBuilder().build().target("http://localhost:8080");
Run Code Online (Sandbox Code Playgroud)

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


结果

来自@peeskillet + 这个片段的答案.

但是,有时close()来自代码片段的方法不会被JAX-RS实现调用(org.jboss.resteasy:resteasy-client-3.0.11.FINAL在本例中).

Pau*_*tha 24

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());
Run Code Online (Sandbox Code Playgroud)

您可能会觉得有趣的其他一些好东西的ClientRequestContextAPI.

UPDATE

也可以看看:

  • 这基本上有效,但是方法`requestContext.getEntity()`在序列化发生之前将实体作为对象返回。有没有办法获取将要发送的纯文本正文? (4认同)
  • 该网站已不再可用...您能分享您找到的内容吗? (2认同)