org.springframework.core.codec.DecodingException: błąd dekodowania JSON: niedozwolony znak ((CTRL-CHAR, kod 31))

Aug 26 2020

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

1 Nilotpal Aug 28 2020 at 02:48

Brakowało mi implementacji Serializable w obiekcie odpowiedzi.

PrasanthRajendran Nov 12 2020 at 13:53

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ślnie FeignContentGzipEncodingInterceptorjest 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