JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regul

打印 上一主题 下一主题

主题 862|帖子 862|积分 2586

一、报错产生场景

RuoYi-Cloud OpenFeign远程调用接口异常错误,错误信息如下:
  1. 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
  2. at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]
复制代码
二、问题产生原因

   远程接口调用参数过大,凌驾当前设置的最大参数长度,部分参数被截掉,导致json字符串不完备,也就解析出问题了。
  附上application-dev.yml中feign的设置
  1. feign:
  2.   sentinel:
  3.     enabled: true
  4.   okhttp:
  5.     enabled: true
  6.   httpclient:
  7.     enabled: false
  8.   client:
  9.     config:
  10.       default:
  11.         connectTimeout: 10000
  12.         readTimeout: 10000
  13.   compression:
  14.     request:
  15.       enabled: true
  16.       min-request-size: 8192
  17.     response:
  18.       enabled: true
复制代码
设置说明:

  • feign.sentinel.enabled: true:启用Sentinel集成。Feign会使用Sentinel举行流量控制和熔断保护。
  • feign.okhttp.enabled: true:启用OkHttp作为Feign的HTTP客户端实现。Feign默认使用的是基于JDK的URLConnection,这里开启了OkHttp作为替换方案。
  • feign.httpclient.enabled: false:禁用HttpClient作为Feign的HTTP客户端实现。假如不需要使用HttpClient,可以将其禁用。
  • feign.client.config.default.connectTimeout: 10000:设置Feign的默认连接超时时间为10秒。连接超时是指在与远程服务创建连接时的最大等待时间。
  • feign.client.config.default.readTimeout: 10000:设置Feign的默认读取超时时间为10秒。读取超时是指从远程服务读取响应数据的最大等待时间。
  • feign.compression.request.enabled: true:启用哀求压缩。Feign会对哀求的数据举行压缩,以淘汰传输的数据量。
  • feign.compression.request.min-request-size: 8192
    :设置哀求压缩的最小哀求大小为8192字节(8KB)。
  • feign.compression.response.enabled: true:启用响应压缩。Feign会对接收到的响应数据举行解压缩,以还原成原始数据。
   查阅资料,定位到该异常是由于Spring Cloud Feign 哀求其他微服务时json数据被压缩导致的
  三、解决方案

1、减小参数的长度(这种方案看详细场景)
2、关闭哀求数据压缩
  1. feign.compression.request.enabled: false
  2. feign.compression.response.enabled: false
复制代码
3、设置哀求压缩的最小哀求大小
  1. feign.compression.request.min-request-size: 8192
复制代码
也就是说只有当哀求的参数大于8192,及8kb,才会将参数举行压缩。
固然这个参数大小自界说

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表