org.springframework.core.codec.DecodingException: ошибка декодирования JSON: недопустимый символ ((CTRL-CHAR, код 31))
Я получаю следующую ошибку при получении ответа почтового метода через 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: Ȁ
Я попытался изменить заголовки запроса, как показано ниже, с ошибкой : -
headers.put("Accept-Encoding", "gzip");
или же
headers.put("Accept-Encoding", "identity");
Это то, что веб-клиент не может обработать сжатый ответ по какой-либо причине !!
Заранее спасибо!!
Ответы
Я пропустил реализацию Serializable для объекта ответа.
Я начал получать это исключение из-за симулируемой зависимости загрузки Spring, spring-cloud-openfeign-coreкогда я обновляю версию spring-cloud-openfeign-coreдо 2.2.5.RELEASE.
Те, кто обновится до версии 2.2.5.RELEASE или более поздней версии, столкнутся с этой проблемой, если у них уже есть свойство feign.request.compression=true.
Техническая причина этого в том, что в
FeignContentGzipEncodingAutoConfigurationклассе подпись аннотации условного свойства изменена с@ConditionalOnProperty("feign.compression.request.enabled", matchIfMissing = false)на@ConditionalOnProperty(value = "feign.compression.request.enabled"), поэтому по умолчаниюFeignContentGzipEncodingInterceptorзапускается. Ссылка на GitHub
Обходной путь
Если вы вызываете службу весенней загрузки, у которой нет механизма для обработки, compressed requestотключите сжатие симулируемого запроса, используя свойство ниже
feign.request.compression=false.
Примечание : К сожалению, мы до сих пор не имеют решения вне коробки в весенне-ботинке для обработки сжатого запроса см