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

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

Я знаю, что возможно активировать регистрацию с Джерси, используя, например, 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 в этом случае).

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

ОБНОВИТЬ

Смотрите также:

Другие вопросы по тегам