1

Spring Cloud Open Feign で応答圧縮構成 (以下のように) を使用すると、gzip応答本文から改行 (「\n」または「\r」) が取り除かれます。エラーは発生しません。改行は空の文字列 "" に置き換えられています。応答には、正しい「content-encoding: gzip」ヘッダーと、整形式の gzip された本文コンテンツが含まれています。

誰かが手がかりを持っていますか?ここでspring-cloud-openfeign/issue400を開いたので、私にとっては問題のようです

feign.compression.response.enabled: true
feign.compression.response.useGzipDecoder: true

# Same behaviour using Apache Http as client
feign.httpclient.enabled: true

SpringCloudFeignClient.java

package springcloudfeigngzip;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "SpringCloudFeignClient", url = "http://localhost:8082")
public interface SpringCloudFeignClient {
    @GetMapping(value = "/gzip")
    String getGzippedString();     
}

ApplicationTest.java:

package springcloudfeigngzip;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
@AutoConfigureWireMock(port = 8082)
class ApplicationTest {
    @Autowired
    private SpringCloudFeignClient springCloudFeignClient;

    @Test
    void success_GzipOneLine() {
        stubFor(get(urlEqualTo("/gzip")).withHeader("Accept-Encoding", containing("gzip"))
                .willReturn(aResponse().withStatus(200).withBody("lineone")));
    
        String response = springCloudFeignClient.getGzippedString();
        assertEquals("lineone", response); //success
    }

    @Test
    void fail_GzipLineBreak() {
        stubFor(get(urlEqualTo("/gzip")).withHeader("Accept-Encoding", containing("gzip"))
                .willReturn(aResponse().withStatus(200).withBody("lineone\nlinetwo")));
    
        String response = springCloudFeignClient.getGzippedString();
        assertEquals("lineone\nlinetwo", response); //fail!
    }
}

ブートストラップ.yml:

feign:
  compression:
    response:
      enabled: true
      useGzipDecoder: true

バージョン:

org.springframework.boot: 2.3.3.RELEASE
org.springframework.cloud: Hoxton.SR8

完全なプロジェクトはこちら: https://github.com/spring-cloud/spring-cloud-openfeign/files/5147346/spring-cloud-feign-gzip.zip

4

0 に答える 0