org.springframework.core.codec.DecodingException: Kesalahan decoding JSON: Karakter ilegal ((CTRL-CHAR, kode 31))

Aug 26 2020

Saya mendapatkan kesalahan berikut mendapatkan respons dari metode posting melalui 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: Ȁ

Saya telah mencoba mengubah tajuk permintaan seperti di bawah dengan kegagalan : -

headers.put("Accept-Encoding", "gzip");

atau

headers.put("Accept-Encoding", "identity");

Apakah klien web tidak dapat memproses tanggapan yang di-gzip untuk alasan apa pun !!

Terima kasih sebelumnya!!

Jawaban

1 Nilotpal Aug 28 2020 at 02:48

Saya melewatkan implementasi Serializable ke objek respons.

PrasanthRajendran Nov 12 2020 at 13:53

Saya sudah mulai mendapatkan pengecualian ini dengan ketergantungan pura-pura boot Spring spring-cloud-openfeign-coreketika saya meningkatkan versi spring-cloud-openfeign-coreke 2.2.5.RELEASE.

Bagi mereka yang mengupgrade ke versi 2.2.5.RELEASE atau versi yang lebih baru akan menghadapi masalah ini jika mereka sudah memiliki propertinya feign.request.compression=true.

Alasan teknis di balik ini adalah, di FeignContentGzipEncodingAutoConfigurationkelas tanda tangan anotasi properti bersyarat diubah dari @ConditionalOnProperty("feign.compression.request.enabled", matchIfMissing = false)menjadi @ConditionalOnProperty(value = "feign.compression.request.enabled"), jadi secara default FeignContentGzipEncodingInterceptordipicu. Referensi GitHub

Solusi

Jika Anda memanggil layanan spring-boot yang tidak memiliki mekanisme untuk menangani, compressed requestnonaktifkan kompresi permintaan pura-pura menggunakan properti di bawah ini

feign.request.compression=false.

CATATAN : Sayangnya, kami masih belum memiliki solusi out-of-box di spring-boot untuk menangani permintaan terkompresi rujukan