java - 如何使用zuul将响应主体提取到后置过滤器中

标签 java spring servlets netflix-zuul

我正在开发一个 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;
}
}

最佳答案

RequestContext.getCurrentContext().getResponseDataStream() 对我来说效果很好,我也能够操纵响应。

关于java - 如何使用zuul将响应主体提取到后置过滤器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54692579/

相关文章:

java - 在 JSP 中的 session 的同一页面上显示错误消息?

java - 无法创建记录器 Tomcat 错误

java - 如何从一个 Java FXML Controller 中从另一个 FXML Controller 获取数据(这些 Controller 不是嵌套 Controller )?

java - 如何修复 ViewHolder 上的 "NullPointerException"?

java - 在 Oracle DB 中唯一标识源 JDBC 进程

java - 为什么Spring MVC会以404响应并报告“在DispatcherServlet中未找到带有URI […]的HTTP请求的映射”?

java - Freemarker 模板异常

java - 在测试 Spring MVC Web 应用程序时切换数据库?

java - 接收错误即使定义了自定义 @ControllerAdvice 也无法调用 @ExceptionHandler

java - Tomcat 不刷新响应缓冲区