org.springframework.core.codec.DecodingException: JSON kod çözme hatası: Geçersiz karakter ((CTRL-CHAR, kod 31))
WebClient (org.springframework.web.reactive.function.client) aracılığıyla bir gönderi yönteminin yanıtını alırken aşağıdaki hatayı alıyorum
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: Ȁ
İsteğin başlıklarını başarısızlıkla değiştirmeyi denedim : -
headers.put("Accept-Encoding", "gzip");
veya
headers.put("Accept-Encoding", "identity");
Web istemcisinin gzip'lenmiş yanıtı herhangi bir nedenle işleyememesinden mi?
Şimdiden teşekkürler!!
Yanıtlar
Serializable'ı yanıt nesnesine uygulamayı kaçırdım.
Ben Bahar çizme en uydurmak olarak bağımlılık ile bu özel durum alma başlamıştır spring-cloud-openfeign-coreı sürümünü yükseltirken spring-cloud-openfeign-coreiçin 2.2.5.RELEASE.
2.2.5.RELEASE sürümüne veya sonraki sürüme yükseltme yapanlar için, zaten mülke sahiplerse bu sorunla karşılaşacaklardır feign.request.compression=true.
Bunun arkasındaki teknik sebebi de vardır
FeignContentGzipEncodingAutoConfigurationsınıftan değiştirildi şartlı mülkiyet açıklama imza@ConditionalOnProperty("feign.compression.request.enabled", matchIfMissing = false)için@ConditionalOnProperty(value = "feign.compression.request.enabled")varsayılan bu yüzden tarafından,FeignContentGzipEncodingInterceptortetiklenir. GitHub referansı
Geçici çözüm
compressed requestİşlemek için bir mekanizmaya sahip olmayan bir yaylı önyükleme hizmetini çağırıyorsanız , aşağıdaki özelliği kullanarak sahte istek sıkıştırmasını devre dışı bırakın
feign.request.compression=false.
NOT : Ne yazık ki, biz hala sıkıştırılmış isteği işlemek için yay bagaja dışı kutu çözümü yok bakın