1、 ​​​​​​feign不指定url调用不通,
        新知识:原来url:http://172.29.126.162:1010/hc-system/platform/organization/person/10001

使用微服务调用:http://hc-system/platform/organization/person/10001,去掉ip和端口也能调用通。

(ribbon负载均衡)feign指定ip和端口时,会把ip和端口拼在url前,不指定的话会把服务名拼接在url前。

背景:开始写松兰山项目时,使用feign调用hc那边服务的接口,因为不指定url(ip和端口)时调用不通,所以指定了url,这时是能够调通的。

①最开始指定ip、端口时,

这时候因为指定了url,所以不会把服务名拼接在url前,只会把ip、端口拼在url前,打开feign日志查看url。

完整url: http://172.29.126.162:1010/hc-system/platform/organization/person/10001 能够调通。

②后面去掉了url,直接部署,发现报错,

完整url变成: http://hc-system/hc-system/platform/organization/person/10001。

这时我才怀疑不指定url时会自动把服务名拼接在url前,然后发起请求。

③后面因为正式环境要开始上了,所以必须把url去掉,这时候去掉了url无法调用,后来才知道貌似feign会不指定ip时,会自动把服务名拼接在url前面(还不知道为什么),因此导致错误。

不指定url时:

这时就能请求成功!!!!!

ps:还有个小问题,我之前的项目,不指定ip和端口,但是还是在url前加上了服务名,不知道为什么还是能请求成功,还需要进一步思考。

2、 背景:feign调用不通,报错,困了我快一个月!!!可恶,中间花了两天解决,把百度都试了一遍,都没有用,都快哭了,现在说下解决过程。

开始我打开了日志进行进一步查看报错信息,需要在feign使用配置文件中加入日志级别,日志级别是FULL,并在配置文件中也加入日志级别。

3、然后发现报错404 not found,开始以为是参数不够,被调用为三个参数,调用时传两个参数,加上了之后还是报错,然后发现是注解用错了,之前用的是@PathVariable(复制过来没有改),使用@RequestParam后错误改变(低级错误)。

4、报错: 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: (ByteArrayInputStream); line: 1, column: 2]。

5、然后feign调用接口,使用String接收,把字符串打印出来, 发现乱码了???

还发现传回来是二进制数据??

然后开始了疯狂的百度中,中间试了无数次,各种加什么配置,去掉压缩之类的都不行,还有加过滤器什么的也不行。

最后终于在一个大哥的文章中发现了答案,他和我一样是打印出来发现乱码,这个问题就是gzip接收到的还是压缩数据,所以乱码,还是试了一下他说没用的配置,结果对我有用!!!!!(他下面真正对她有用的方法对我没用,也是加拦截器)

线上问题处理-feign调用报错(Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) )_im_ayday的博客-CSDN博客_feign调用报错处理

答案:在配置文件中加入feign.compression.response.useGzipDecoder为true即可。

6、乱码的事情没了,发现只有中文乱码了,靠!!!!!!又整了我好久好久,百度的所有方案都试过了,还看了feign日志所有参数,好像也没问题的,人都快哭了,终于找到了解决方案。

@Configuration
public class FeignConfig implements RequestInterceptor {@Autowiredprivate ObjectFactory<HttpMessageConverters> messageConverters;@Beanpublic Encoder feignFormEncoder() {return new SpringFormEncoder(new SpringEncoder(messageConverters));}@Beanpublic Decoder feignDecoder() {return new ResponseEntityDecoder(new SpringDecoder( () -> {FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter() {@Overridepublic Object read(Type type, Class<?> contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {Object result=null;if ("java.lang.String".equals(type.getTypeName())) {result= StreamUtils.copyToString(inputMessage.getBody(), Charset.forName("utf8"));} else {result=super.read(type, contextClass, inputMessage);}return result;}};return new HttpMessageConverters(fastConverter);}));}@Overridepublic void apply(RequestTemplate requestTemplate) {try {ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if (null != servletRequestAttributes) {HttpServletRequest request = servletRequestAttributes.getRequest();// 获取所有头文件信息的keyEnumeration<String> headerNames = request.getHeaderNames();if (null != headerNames) {while (headerNames.hasMoreElements()) {// 获取头文件的key和valueString headerName = headerNames.nextElement();String headerValue = request.getHeader(headerName);// 跳过content-length,不然可能会报too many bites written问题if ("content-length".equalsIgnoreCase(headerName)) {continue;}// 将令牌数据添加到头文件中,当用feign调用的时候,会传递给下一个微服务requestTemplate.header(headerName, headerValue);}}}} catch (Exception e) {e.printStackTrace();}}@Beanpublic Logger.Level feignLoggerLevel() {return Logger.Level.FULL;}}

参考:Feign乱码 - 知乎

答案:加了个解码器,转成utf8就可以了。

7、本来前面的feign调用都能够在线上正常运行了,突然很多feign调用报错,还都是同一个错。

feign.codec.DecodeException: Error while extracting response for type [com.entity.Result<com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.emergency.pojo.HcUser>>] and content type [application/json]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: syntax error, expect {, actual [, pos 685, fieldName roles, fastjson-version 1.2.83; nested exception is com.alibaba.fastjson.JSONException: syntax error, expect {, actual [, pos 685, fieldName roles, fastjson-version 1.2.83

说是转换问题,主要我feign调好之后就没动过代码了,咋突然坏了??

然后我进行了大量百度,试了很多也改不好,我以为是nacos配置的修改了的问题或者又要重写解码器,实际情况就是一个服务是的接口是好的,另一个服务的几个接口是报错的。后面让一个同事看了一下,原来是被调用方把数据结构给改了,靠,导致转换错误,是中间一个字段从对象改成了对象的数组,导致json转换错误。

答案:还是先好好看看错误,不用一开始就把问题想的太复杂,先看看被调用方有没有修改。

feign调用不通问题,JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r相关推荐

  1. 线上问题处理-feign调用报错(Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) )

    线上问题处理-feign调用报错 业务场景:服务1通过Feign调用服务2,测试阶段一切正常,线上有数据丢失(为避免敏感本地简单复现了下).报错如下: 2021-12-04 13:47:47.774 ...

  2. Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed betwee...

    用声明式Feign调用服务进行操作时,如果参数过多,结构复杂,会报以下json错误 去掉这些配置: # 配置请求GZIP压缩 feign.compression.request.enabled = t ...

  3. “JSON parse error: Unexpected character (‘1‘ (code 49))的解决方式

    现在是:2022年4月30日22:29:49 大家好,我是雄雄. 刚刚在调用接口的时候,出现了个错误: {"code": 400,"success": fals ...

  4. Fegin调用时出现JSON parse error:can not deserialize instance of ...

    一.问题 接口调用时提示json解析报错,如图 二.解决 通过排查发现Fegin调用时出现问题,Fegin调用的代码时这样写的: employeeFeignClient.addRole(iamOrga ...

  5. 报错:JSON parse error: Unexpected character (‘ ‘ (code 160)): was expecting double-quote to start fiel

    1.在遇到此问题时,首先先检查传输的 json 报文是否有问题: 检查引号与逗号是否为中文 检查最后一个键值对是否加了逗号 错误示例: {"remoteNodeCode":&quo ...

  6. json解析报错:HttpMessageNotReadableException: JSON parse error: Unexpected character (‘/‘ (code 47))

    报错信息 at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 109] ...

  7. 调用Feign接口报错:HttpMessageNotReadableException:JSON parse error:Illegal character ((CTRL-CHAR, code 31)

    背景 在一个定时任务中,每隔一个小时会调用远程接口进行数据同步.本着"先实现,再优化"的原则,刚开始实现方式是在循环里每次调用远程接口,传入单条记录,因为每次都需要完成建立连接.数 ...

  8. 在JME中遇到org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: 问题的解决方法

    今天根据开发需求,需要在发布后台中创建一个书本,专栏中每本书的章节数需要200个左右,于是我想到了使用Jmeter工具帮助我完成这一任务,可是在实践过程中遇到了很多问题,后来解决了这些问题,因此,记录 ...

  9. 编码格式问题 错误:JSON parse error: Invalid UTF-8 middle byte 0x3f

    接口因为编码不一致导致出错: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: ...

  10. JSON parse error: Cannot construct instance of “xxx“(although at least one Creator exists)

    今天写SpringBoot出现一个错误 JSON parse error: Cannot construct instance of `priv.kuki.param.AddressListParam ...

最新文章

  1. Recommenders with TensorRT
  2. MYSQL修改配置,允许远程访问
  3. Lync 2013部署(1)—AD准备
  4. linux中国用户,Linux中国 适合新用户的Linux
  5. 【C#】【引用加原创】C#实现kalman滤波
  6. 同等质量下那种图片格式小_最实用的Window小工具合集,总有一款适合你!
  7. 你知道几句?Linux之父十大名言
  8. 西瓜书+实战+吴恩达机器学习(十)监督学习之支持向量机 Support Vector Machine
  9. iOS - 常用本机URL跳转设置
  10. 菜鸟教程python100-Python 基础教程 | 菜鸟教程
  11. DM manager工具的使用
  12. (理财十)钱生钱账户,如何理财实现长期目标
  13. jdk证书的相关命令
  14. Sentinel控制台实时监控空白
  15. 转载:APM文件夹释义
  16. c语言中fflush作用,详解C语言fflush()函数的使用
  17. C# 之 概率随机数
  18. 解密:斐讯N1为何火了?分享全套N1救砖指南!值得收藏
  19. AVB之镜像的签名及验证签名详解
  20. RAP2 API管理工具部署手册

热门文章

  1. 能上QQ,无法打开网页解决办法!!!(亲测能用)
  2. 三维虚拟工厂仿真交互展示有哪些功能
  3. 爬虫不借助浏览器登录_借助Android音乐播放器和旅行组合踏上道路
  4. Woff2字体404错误
  5. 各类顶尖经典电影500部,先收着,待有空的时候慢慢看吧!
  6. 微信小程序实现物流步骤条
  7. iOS小技能:提取数字(文本框对粘贴内容进行手机号码提取)
  8. 极限存在准则,两个重要极限
  9. 华为云学院干货:对象存储服务:便捷管理存储资源
  10. 国际短信平台怎么找?