org.springframework.core.codec.DecodingException: error de decodificación JSON: carácter ilegal ((CTRL-CHAR, código 31))

Aug 26 2020

Recibo el siguiente error al obtener una respuesta de un método de publicación a través de 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: Ȁ

Intenté cambiar los encabezados de la solicitud como debajo con falla : -

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

o

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

¿Es que webclient no puede procesar la respuesta comprimida con gzip por algún motivo?

¡¡Gracias por adelantado!!

Respuestas

1 Nilotpal Aug 28 2020 at 02:48

Eché de menos implementar Serializable en el objeto de respuesta.

PrasanthRajendran Nov 12 2020 at 13:53

He comenzado a recibir esta excepción a la dependencia de fingir la primavera de arranque spring-cloud-openfeign-coreal actualizar la versión de spring-cloud-openfeign-corea 2.2.5.RELEASE.

Para aquellos que actualicen a la versión 2.2.5.RELEASE o una versión posterior se enfrentarán a este problema si ya tienen la propiedad feign.request.compression=true.

La razón técnica detrás de esto es que, en la FeignContentGzipEncodingAutoConfigurationclase, la firma de anotación de propiedad condicional cambió de @ConditionalOnProperty("feign.compression.request.enabled", matchIfMissing = false)a @ConditionalOnProperty(value = "feign.compression.request.enabled"), por lo que FeignContentGzipEncodingInterceptorse activa de forma predeterminada . Referencia de GitHub

Solución alterna

Si llama a un servicio de arranque de primavera que no tiene un mecanismo para manejarlo compressed request, desactive la compresión de solicitud fingida utilizando la propiedad a continuación

feign.request.compression=false.

NOTA : Por desgracia, todavía no tienen la solución fuera de la caja en la primavera-arranque para manejar la petición comprimido se refiere