如何在Zuul过滤器中识别响应内容类型?

时间:2019-03-26 17:33:35

标签: spring-boot servlets httpresponse netflix-zuul

我在zuul服务中创建了一个过滤器。

我可以获取响应状态,但是无法获取响应内容类型。

代码:

public class UserEventFilter extends ZuulFilter {

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        HttpServletResponse response = ctx.getResponse();
        System.out.println("response status:" + response.getStatus());
        System.out.println("response status:" + ctx.getResponseStatusCode());
        System.out.println("response content type:" + response.getContentType());

        try (final InputStream responseDataStream = ctx.getResponseDataStream()) {
            final String responseData = CharStreams
                    .toString(new InputStreamReader(responseDataStream, Constants.ENCODING_UTF_8));
            ctx.setResponseBody(responseData);
            System.out.println("responseData:"+responseData);
        } catch (IOException exception) {
            exception.printStackTrace();
        }
    }   

}

响应内容类型为空。

我想做的是,我必须获取所有响应的响应主体,除非它是“ application / octet-stream”。

1 个答案:

答案 0 :(得分:0)

尝试一下:

RequestContext context = RequestContext.getCurrentContext();
List<Pair<String, String>> headers = context.getZuulResponseHeaders();

比在那里找到内容类型。您应该重写filterType方法:

@Override
public String filterType() {
   return POST_TYPE;
}

这是POST过滤器,如果您需要响应,我想您正在使用后过滤器。