Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用zuul将响应体提取到后过滤器中_Java_Spring_Servlets_Netflix Zuul - Fatal编程技术网

Java 如何使用zuul将响应体提取到后过滤器中

Java 如何使用zuul将响应体提取到后过滤器中,java,spring,servlets,netflix-zuul,Java,Spring,Servlets,Netflix Zuul,我正在开发一个POC,我需要使用zuul作为服务器来路由2个路由,第一个路由将正常运行,但它有一个自定义的post筛选器,它将使用第一个请求响应的一些数据向其他api发送另一个请求, 因此,需要将第一个请求的响应主体提取到我的自定义post筛选器中,并获得一些特定属性,但我找不到响应,因为它始终为null,但状态代码为200。 我如何等待并从响应中获取特定属性的值,并获取实际状态代码,而不仅仅是200作为默认值 我试图使用CloudGateway来实现这个功能,但在提取响应时遇到了同样的问题。

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