Как извлечь тело ответа в пост-фильтр, используя zuul - PullRequest
0 голосов
/ 14 февраля 2019

Я работаю над POC. Мне нужно использовать zuul в качестве сервера для маршрутизации 2-х маршрутов. Сначала маршруты будут работать нормально, но у него есть собственный пост-фильтр, который отправит другой запрос другим API, используя некоторые данные ответа первогоРекет, поэтому нужно извлечь тело ответа первого запроса в мой пользовательский пост-фильтр и получить некоторые конкретные атрибуты, но я не могу найти ответ, поскольку он всегда будет нулевым, но код состояния равен 200. Как я могу ждать и получить значениеопределенного атрибута из ответа и получить фактический код состояния не только 200 в качестве значения по умолчанию.

Я попытался сделать эту реализацию с использованием облачного шлюза, но я достиг той же точки неспособности извлекать ответ.Также я попытался создать ответный декоратор, но тоже не получилось.

@Component
public class AddResponseHeaderFilter extends ZuulFilter {
@Override
public String filterType() {
    return "post";
}

@Override
public int filterOrder() {
    return 1;
}

@Override
public boolean shouldFilter() {
    return true;
}

@Override
public Object run() {
    System.out.println("this is my filter");
    RequestContext context = RequestContext.getCurrentContext();
    HttpServletRequest request = new HttpServletRequestWrapper(context.getRequest());
    System.out.println(String.format("%s request to %s", request.getMethod(), request.getRequestURL().toString()));
    HttpServletResponse servletResponse = context.getResponse();
    // return an address only
    System.out.println(context.getResponseBody().toString());
    servletResponse.addHeader("X-Foo", UUID.randomUUID().toString());
    return null;
}
}

1 Ответ

0 голосов
/ 17 июля 2019

RequestContext.getCurrentContext().getResponseDataStream() у меня отлично работает, я тоже могу манипулировать ответом.

...