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