org.springframework.core.codec.DecodingException: errore di decodifica JSON: carattere non valido ((CTRL-CHAR, codice 31))

Aug 26 2020

Ricevo il seguente errore ottenendo una risposta di un metodo di pubblicazione tramite 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: Ȁ

Ho provato a cambiare le intestazioni della richiesta come sotto con errore : -

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

o

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

È che webclient non è in grado di elaborare la risposta compressa con gzip per qualsiasi motivo !!

Grazie in anticipo!!

Risposte

1 Nilotpal Aug 28 2020 at 02:48

Ho perso l'implementazione di Serializable nell'oggetto risposta.

PrasanthRajendran Nov 12 2020 at 13:53

Ho iniziato a ricevere questa eccezione con la finta dipendenza di Spring Boot spring-cloud-openfeign-corequando aggiorno la versione di spring-cloud-openfeign-corea 2.2.5.RELEASE.

Per coloro che eseguono l'aggiornamento alla versione 2.2.5.RELEASE o versione successiva dovrà affrontare questo problema se ne hanno già la proprietà feign.request.compression=true.

La ragione tecnica alla base di ciò è che nella FeignContentGzipEncodingAutoConfigurationclasse la firma dell'annotazione della proprietà condizionale è cambiata da @ConditionalOnProperty("feign.compression.request.enabled", matchIfMissing = false)a @ConditionalOnProperty(value = "feign.compression.request.enabled"), quindi per impostazione predefinita FeignContentGzipEncodingInterceptorviene attivata. Riferimento a GitHub

Soluzione

Se stai chiamando un servizio di avvio a molla che non ha un meccanismo per gestire il, compressed requestdisabilita la compressione della richiesta falsa usando la proprietà sottostante

feign.request.compression=false.

NOTA : Sfortunatamente, non abbiamo ancora la soluzione pronta all'uso in spring-boot per gestire il riferimento della richiesta compressa