Как зарегистрировать тело запроса в клиенте JAX-RS

Мне нужно увидеть тело запроса с запросом клиента JAX-RS, чтобы убедиться, что сериализация работает правильно и повторно использовать запрос для тестовых клиентов, например Postman.

Я знаю, что можно активировать регистрацию в Джерси, используя, например, resource.addFilter(new com.sun.jersey.api.client.filter.LoggingFilter());. Тем не менее, я не использую реализацию Джерси или RESTEasy напрямую, но абстрагируюсь через API JAX-RS:

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

Как включить запись здесь?


Результат

Ответ от @peeskillet + этот фрагмент.

Однако иногда метод close() из фрагмента не вызывается реализацией JAX-RS (org.jboss.resteasy:resteasy-client-3.0.11.FINAL в этом случае).

Ответ 1

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 для некоторых других полезных вещей, которые могут вам показаться интересными.

UPDATE

См. также: