org.springframework.core.codec.DecodingException: erreur de décodage JSON: caractère illégal ((CTRL-CHAR, code 31))

Aug 26 2020

J'obtiens l'erreur suivante en obtenant une réponse d'une méthode de publication via 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: Ȁ

J'ai essayé de changer les en-têtes de la demande comme ci-dessous avec un échec : -

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

ou

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

Est-ce que le client Web est incapable de traiter la réponse gzippée pour une raison quelconque !!

Merci d'avance!!

Réponses

1 Nilotpal Aug 28 2020 at 02:48

J'ai raté l'implémentation de Serializable à l'objet de réponse.

PrasanthRajendran Nov 12 2020 at 13:53

J'ai commencé à obtenir cette exception avec la feinte dépendance de Spring Boot spring-cloud-openfeign-corelorsque je mets à niveau la version de spring-cloud-openfeign-corevers 2.2.5.RELEASE.

Pour ceux qui mettent à niveau vers la version 2.2.5.RELEASE ou une version ultérieure seront confrontés à ce problème s'ils ont déjà la propriété feign.request.compression=true.

La raison technique derrière cela est que, dans la FeignContentGzipEncodingAutoConfigurationclasse, la signature d'annotation de propriété conditionnelle est passée de @ConditionalOnProperty("feign.compression.request.enabled", matchIfMissing = false)à @ConditionalOnProperty(value = "feign.compression.request.enabled"), donc par défaut FeignContentGzipEncodingInterceptorest déclenchée. Référence GitHub

solution de contournement

Si vous appelez un service de démarrage à ressort qui n'a pas de mécanisme pour gérer le, compressed requestdésactivez la compression de la demande de simulation à l'aide de la propriété ci-dessous

feign.request.compression=false.

NOTE : Malheureusement, nous ne disposons toujours pas la solution hors de la boîte au printemps-démarrage pour traiter la demande comprimée se référer