У меня есть ZuulFilter, который после проксирования слегка меняет отклик.Это работает, как и ожидалось для стандартного случая
@Component
public class ResponseEnhancerFilter extends ZuulFilter {
@Autowired
private ObjectMapper objectMapper;
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
RequestContext ctx = RequestContext.getCurrentContext();
try (final InputStream is = ctx.getResponseDataStream()) {
String response = StreamUtils.copyToString(is, getEncoding(ctx));
ctx.setResponseBody(response.replaceAll("regex", "replacement"));
} catch (IOException e) {
}
return null;
}
private Charset getEncoding(RequestContext ctx) {
return Optional.ofNullable(ctx.getResponse().getCharacterEncoding())
.map(Charset::forName)
.orElse(Charsets.UTF_8);
}
}
Но когда ответ от сервера, ответ на который возвращается, возвращает ответ gzipped в getResponseDataStream, я получаю сообщение gzipped и, конечно, замена не работает.
Я вижу, что есть два метода в контексте, которые включают gzip: getResponseGZipped и isGzipRequested
Существуют ли какие-либо стандартные подходы для обработки такого типа фильтра в zuul?