Java 如何使用zuul将响应体提取到后过滤器中
我正在开发一个POC,我需要使用zuul作为服务器来路由2个路由,第一个路由将正常运行,但它有一个自定义的post筛选器,它将使用第一个请求响应的一些数据向其他api发送另一个请求, 因此,需要将第一个请求的响应主体提取到我的自定义post筛选器中,并获得一些特定属性,但我找不到响应,因为它始终为null,但状态代码为200。 我如何等待并从响应中获取特定属性的值,并获取实际状态代码,而不仅仅是200作为默认值 我试图使用CloudGateway来实现这个功能,但在提取响应时遇到了同样的问题。 我也试着做一个响应装饰器,但也失败了Java 如何使用zuul将响应体提取到后过滤器中,java,spring,servlets,netflix-zuul,Java,Spring,Servlets,Netflix Zuul,我正在开发一个POC,我需要使用zuul作为服务器来路由2个路由,第一个路由将正常运行,但它有一个自定义的post筛选器,它将使用第一个请求响应的一些数据向其他api发送另一个请求, 因此,需要将第一个请求的响应主体提取到我的自定义post筛选器中,并获得一些特定属性,但我找不到响应,因为它始终为null,但状态代码为200。 我如何等待并从响应中获取特定属性的值,并获取实际状态代码,而不仅仅是200作为默认值 我试图使用CloudGateway来实现这个功能,但在提取响应时遇到了同样的问题。
@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()
对我来说效果很好,我也能够操纵响应。我不需要编写请求,我需要获取响应体以从中获取一些数据以用于另一个api的另一个请求,而另一个api不是同一个api,因此我不需要为输入请求制作包装器,谢谢你
import java.nio.charset.Charset;
import org.springframework.util.StreamUtils;
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String requestLog = StreamUtils.copyToString(request.getInputStream(),
Charset.forName("UTF-8"));