You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Spring Boot中的WebClient支持gzip压缩解码?

解决WebClient处理gzip压缩响应的问题
  • 问题根源:你手动添加了Accept-Encoding: gzip请求头,但WebClient默认没有配置gzip解码逻辑,导致返回的压缩内容无法被解压,最终显示乱码。

  • 正确解决方案:依托Reactor HttpClient的自动压缩能力,它能同时处理两个核心逻辑:

    1. 自动添加符合要求的Accept-Encoding请求头
    2. 自动识别响应的Content-Encoding: gzip标识,完成内容解压
  • 代码修改方式:在配置ReactorClientHttpConnector时,给HttpClient添加.compress(true)配置,同时可以移除手动添加的Accept-Encoding头(自动配置更稳妥,能兼容服务器不压缩的场景)。

修改后的完整代码如下:

@Bean
WebClient webClient(OAuth2AuthorizedClientManager authorizedClientManager,
                    @Value("${test.url}") String authUserUri) {
    ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2 =
            new ServletOAuth2AuthorizedClientExchangeFilterFunction(
                    authorizedClientManager);
    oauth2.setDefaultClientRegistrationId(AUTH_SERVER_OAUTH2_CLIENT_ID);
    final int size_mb = 10;
    final int size = size_mb * 1024 * 1024;
    final ExchangeStrategies strategies = ExchangeStrategies.builder()
            .codecs(codecs -> codecs.defaultCodecs().maxInMemorySize(size)).build();
    
    // 移除手动添加的Accept-Encoding头,由compress(true)自动处理
    var webClientBuilder = WebClient.builder().apply(oauth2.oauth2Configuration())
            .baseUrl(authUserUri);

    //Detailed http communication logging for local profile.
    if (true) {
        webClientBuilder.codecs(configurer -> configurer.defaultCodecs().enableLoggingRequestDetails(true))
                .clientConnector(new ReactorClientHttpConnector(
                        HttpClient.create()
                                .wiretap(this.getClass().getCanonicalName(), LogLevel.INFO, AdvancedByteBufFormat.TEXTUAL)
                                // 新增:启用自动压缩支持,处理请求头和响应解码
                                .compress(true)));
    }
    return webClientBuilder.exchangeStrategies(strategies).build();
}
  • 额外配置说明:如果需要精确控制请求头(比如只指定gzip,不包含其他压缩格式),可以用.compress(Collections.singletonList("gzip"))替代.compress(true),这样HttpClient会仅添加Accept-Encoding: gzip请求头,同时依然自动完成响应解码。

内容的提问来源于stack exchange,提问作者ilhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:08:25