web-dev-qa-db-ja.com

JAX-RSクライアントでリクエスト本文を記録する方法

シリアル化が正しく機能することを確認し、 Postman などのテストクライアントのリクエストを再利用するために、クライアントJAX-RSリクエストでリクエスト本文を見る必要があります。

たとえば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");
_

ここでロギングを有効にするにはどうすればよいですか?


結果

@ peeskilletからの回答 + このスニペット

ただし、スニペットのclose()メソッドがJAX-RS実装によって呼び出されない場合があります(この場合は_org.jboss.resteasy:resteasy-client-3.0.11.FINAL_)。

14
thomas.mc.work

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 AP​​I は、あなたが興味を引くかもしれない他のいくつかのグッズのために。

更新

関連項目:

23
Paul Samsotha