org.springframework.core.codec.DecodingException: błąd dekodowania JSON: niedozwolony znak ((CTRL-CHAR, kod 31))
Otrzymuję następujący błąd podczas uzyskiwania odpowiedzi metody wpisu za pośrednictwem WebClient (org.springframework.web.reactive.function.client)
org.springframework.core.codec.DecodingException: JSON decoding error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens; nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed between tokens
at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 2]
at org.springframework.http.codec.json.AbstractJackson2Decoder.processException(AbstractJackson2Decoder.java:215)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Ȁ
Próbowałem zmienić nagłówki żądania jak poniżej z niepowodzeniem : -
headers.put("Accept-Encoding", "gzip");
lub
headers.put("Accept-Encoding", "identity");
Czy to dlatego, że klient WWW nie jest w stanie przetworzyć odpowiedzi spakowanej gzip z jakiegokolwiek powodu !!
Z góry dziękuję!!
Odpowiedzi
Brakowało mi implementacji Serializable w obiekcie odpowiedzi.
Zacząłem otrzymywać ten wyjątek z zależnością pozorowanego rozruchu Springa, spring-cloud-openfeign-coregdy aktualizuję wersję spring-cloud-openfeign-coredo 2.2.5.RELEASE.
Dla tych, którzy dokonają aktualizacji do wersji 2.2.5.RELEASE lub nowszej, napotkają ten problem, jeśli mają już właściwość feign.request.compression=true.
Technicznym powodem takiego
FeignContentGzipEncodingAutoConfigurationstanu rzeczy jest to, że w klasie sygnatura adnotacji właściwości warunkowej została zmieniona z@ConditionalOnProperty("feign.compression.request.enabled", matchIfMissing = false)na@ConditionalOnProperty(value = "feign.compression.request.enabled"), więc domyślnieFeignContentGzipEncodingInterceptorjest wyzwalana. Dokumentacja GitHub
Obejście problemu
Jeśli wywołujesz usługę spring-boot, która nie ma mechanizmu do obsługi, compressed requestwyłącz kompresję fałszywych żądań, używając poniższej właściwości
feign.request.compression=false.
UWAGA : Niestety, nadal nie mamy gotowego rozwiązania w bagażniku sprężynowym do obsługi skompresowanego żądania skierowania