Как зарегистрировать тело запроса в клиенте 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 для некоторых других вкусностей, которые могут вас заинтересовать.
ОБНОВИТЬ
Смотрите также:
- JAX-RS 2 распечатать запрос JSON, для полной / лучшей реализации.