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: Ȁ

Я попытался изменить заголовки запроса, как в случае с failure: -

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

or

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

Это веб-клиент по какой-то причине не может обработать сжатый ответ!!

Заранее спасибо!!


person Nilotpal    schedule 27.08.2020    source источник
comment
Вы читали это? stackoverflow.com/questions/42621547/   -  person z atef    schedule 27.08.2020
comment
да. В основном я получаю проблему от веб-клиента. Проблема в основном в том, как разрешить одно и то же исключение JSonParseException в веб-клиенте.   -  person Nilotpal    schedule 27.08.2020
comment
Можете ли вы разобрать полезную нагрузку вручную? установите отладчик или проверьте, что отправляет клиент, и попробуйте его проанализировать. также попробуйте отправить тот же почтовый запрос, используя другого клиентского почтальона, curl..etc   -  person z atef    schedule 27.08.2020
comment
Да, когда конечная точка отправляется в почтальоне, она дает ответ JSON.   -  person Nilotpal    schedule 27.08.2020
comment
Можно проверить, действителен ли токен, используя что-то вроде этого: gist.github.com/thomasdarimont/46358bc8167fce059d83a1ebdb92b0e7   -  person z atef    schedule 27.08.2020
comment
Я не думаю, что это должно быть связано с токенами аутентификации. Ошибка после получения ответа при разборе jSON.   -  person Nilotpal    schedule 27.08.2020


Ответы (3)


Удалить заголовок (Accept-Encoding, gzip) Вы не получите ошибку декодирования JSON: недопустимый символ ((CTRL-CHAR, код 31))

Если длина ответа превышает пороговое значение по умолчанию, ответ будет заархивирован, что приведет к ошибке декодирования JSON.

person Vivek Arora    schedule 22.04.2021

Я пропустил реализацию Serializable для объекта ответа.

person Nilotpal    schedule 28.08.2020
comment
Я вижу, где проблема. - person z atef; 28.08.2020

Я начал получать это исключение с зависимостью загрузки 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.

ПРИМЕЧАНИЕ. К сожалению, у нас до сих пор нет готового решения в spring-boot для обработки сжатого запроса см.

person Prasanth Rajendran    schedule 12.11.2020