Open Feign调用出现CRTL CODE 31两种解决方案

Posted zero13_小葵司

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Open Feign调用出现CRTL CODE 31两种解决方案相关的知识,希望对你有一定的参考价值。

在通过spring cloud的系统间调用中,大家会大量使用feign,但是在一些业务情况下可能会出现CRTL CODE 31。

feign.codec.DecodeException: Error while extracting response for type [class com.zhundian.member.common.R] and content type [application/json]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse 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: (PushbackInputStream); line: 1, column: 2]

        at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:182)

        at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:142)

        at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80)

这个报错一看会有点莫名其妙,觉得是不是数据有问题或者报文结构有问题?

我们来看2种原因及对应解决方案:

1. 其中一方开启了gzip

这时我们要看看调用方是否打开了gzip

  • web应用的话,看看nginx是否开启了gzip,而被调用方未开启;
  • 调用方也是spring cloud应用,其feign配置开启了gzip,被调用方未开启;

这时只需不同应用统一gzip配置,再次调试看看。

2. 报文过长

这个应该算是Feign的issue,当请求报文过长或者过于复杂时,会报这个问题。这种情况下我们要审视一下,为什么我们的请求数据会需要这么长?这样的长报文我们是否换一种请求方式?

以上是关于Open Feign调用出现CRTL CODE 31两种解决方案的主要内容,如果未能解决你的问题,请参考以下文章

open-feign远程调用出错

GitHub Open Feign 使用总结

openfeign自定义异常不走降级

open feign的超时配置及源码跟踪

上传文件,以及通过 Feign 调用上传文件接口

使用 Spring Cloud Open Feign 获取 JSON 中的对象列表