如何压缩Spring WebClient发布请求的正文?

时间:2019-08-20 06:45:38

标签: spring-boot reactor-netty spring-webclient

我正在使用Spring WebClient做一些测试。在以下代码中,我将compress设置为true。但是,当我检查调试日志时,可以看到添加了“ accept-encoding:gzip”标头,但是主体未压缩。有什么办法在请求后正文上强制压缩吗?谢谢。

HttpClient httpClient = HttpClient.create().compress(true).wiretap(true);

WebClient webClient = WebClient.builder()
                .baseUrl("https://jsonplaceholder.typicode.com")
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
                .clientConnector(new ReactorClientHttpConnector(httpClient))
                .build();

Post post = new Post();

        post.setUserId(1000L);
        post.setId(2000L);
        post.setTitle("Reactor Netty");

        StringBuffer sb = new StringBuffer();
        IntStream.range(1, 1000).forEach(i -> sb.append("Spring boot webclient"));
        post.setBody(sb.toString());

        Post p = webClient.post().uri("/posts").syncBody(post).retrieve().bodyToMono(Post.class).block();

1 个答案:

答案 0 :(得分:1)

请参阅this

.compress(true)用于服务器以gzip格式响应。这就是为什么您的帖子正文未压缩。

我对手动http-client和web-client不熟悉。当我使用Spring时,我使用RestTemplate。 This answer详细说明了如何强制压缩请求正文。