Zuul中gzip处理

//兼容请求mock接口结果返回gzip数据,但是request请求头没有添加Accept-Encoding:gzip,deflate,br
private void gzipBugfix(CloseableHttpResponse zuulResponse) throws IOException {
    Header firstHeader = zuulResponse.getFirstHeader(ZuulHeaders.CONTENT_ENCODING);
    if (Objects.nonNull(firstHeader)) {
        String contentEnc = firstHeader.getValue();
        if (!StringUtils.isEmpty(contentEnc)
                && HTTPRequestUtils.getInstance().isGzipped(contentEnc)
                && !RequestContext.getCurrentContext().isGzipRequested()) {
            //响应为gzip但是请求不是gzip,解压转换为String
            try (InputStream ins = zuulResponse.getEntity() == null ? null : zuulResponse.getEntity().getContent();) {
                if (Objects.nonNull(ins)) {
                    Header type = zuulResponse.getFirstHeader(HttpHeaders.CONTENT_TYPE);
                    zuulResponse.setEntity(new StringEntity(
                            StreamUtils.copyToString(new GZIPInputStream(ins), StandardCharsets.UTF_8),
                            Objects.isNull(type) ? ContentType.APPLICATION_JSON : ContentType.parse(type.getValue())));
                }
                zuulResponse.removeHeaders(ZuulHeaders.CONTENT_ENCODING);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值