Как определить тип содержимого ответа в фильтре Zuul?

#spring-boot #servlets #httpresponse #netflix-zuul

#весенняя загрузка #сервлеты #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();
        }
    }   

}
  

тип содержимого ответа выдает значение null.

Что я хочу сделать, так это получить тело ответа для всех ответов, за исключением случаев, когда это «application / octet-stream».

Ответ №1:

Попробуйте это:

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

Чем находить тип содержимого там. Вы должны переопределить метод filterType:

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

это POST-фильтр, если вы хотите получить ответ, я предполагаю, что вы используете post-фильтр.