org.springframework.core.codec.DecodingException: JSON-Decodierungsfehler: Unzulässiges Zeichen ((STRG-CHAR, Code 31))
Ich erhalte die folgende Fehlermeldung, wenn ich eine Antwort einer Post-Methode über WebClient erhalte (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: Ȁ
Ich habe versucht, die Header der Anfrage wie unter mit Fehler zu ändern : -
headers.put("Accept-Encoding", "gzip");
oder
headers.put("Accept-Encoding", "identity");
Ist es so, dass der Webclient die gezippte Antwort aus irgendeinem Grund nicht verarbeiten kann !!
Danke im Voraus!!
Antworten
Ich habe die Implementierung von Serializable für das Antwortobjekt verpasst.
Ich habe begonnen, diese Ausnahme mit der vorgetäuschten Abhängigkeit von Spring Boot zu bekommen, spring-cloud-openfeign-corewenn ich die Version von spring-cloud-openfeign-coreauf aktualisiere 2.2.5.RELEASE.
Für diejenigen, die ein Upgrade auf Version 2.2.5.RELEASE oder eine neuere Version durchführen, tritt dieses Problem auf, wenn sie bereits über die Eigenschaft verfügen feign.request.compression=true.
Der technische Grund dafür ist, dass in der
FeignContentGzipEncodingAutoConfigurationKlasse die Signatur für bedingte Eigenschaftsanmerkungen von@ConditionalOnProperty("feign.compression.request.enabled", matchIfMissing = false)auf geändert wurde@ConditionalOnProperty(value = "feign.compression.request.enabled")und daher standardmäßigFeignContentGzipEncodingInterceptorausgelöst wird. GitHub-Referenz
Problemumgehung
Wenn Sie einen Spring-Boot-Dienst aufrufen, der nicht über einen Mechanismus zur Behandlung compressed requestdes Vorgangs verfügt, deaktivieren Sie die Komprimierung der Scheinanforderung mithilfe der folgenden Eigenschaft
feign.request.compression=false.
Hinweis : Leider haben wir noch nicht über die Out-of-Box - Lösung im Frühjahr-Boot der komprimierte Anfrage bearbeiten beziehen