JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is

一、报错产生场景

RuoYi-Cloud OpenFeign远程调用接口异常错误,错误信息如下:

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: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]

二、问题产生原因

远程接口调用参数过大,超过当前设置的最大参数长度,部分参数被截掉,导致json字符串不完整,也就解析出问题了。

附上application-dev.yml中feign的配置

feign:
  sentinel:
    enabled: true
  okhttp:
    enabled: true
  httpclient:
    enabled: false
  client:
    config:
      default:
        connectTimeout: 10000
        readTimeout: 10000
  compression:
    request:
      enabled: true
      min-request-size: 8192
    response:
      enabled: true

配置说明:

  1. feign.sentinel.enabled: true:启用Sentinel集成。Feign会使用Sentinel进行流量控制和熔断保护。
  2. feign.okhttp.enabled: true:启用OkHttp作为Feign的HTTP客户端实现。Feign默认使用的是基于JDK的URLConnection,这里开启了OkHttp作为替代方案。
  3. feign.httpclient.enabled: false:禁用HttpClient作为Feign的HTTP客户端实现。如果不需要使用HttpClient,可以将其禁用。
  4. feign.client.config.default.connectTimeout: 10000:设置Feign的默认连接超时时间为10秒。连接超时是指在与远程服务建立连接时的最大等待时间。
  5. feign.client.config.default.readTimeout: 10000:设置Feign的默认读取超时时间为10秒。读取超时是指从远程服务读取响应数据的最大等待时间。
  6. feign.compression.request.enabled: true:启用请求压缩。Feign会对请求的数据进行压缩,以减少传输的数据量。
  7. feign.compression.request.min-request-size: 8192:设置请求压缩的最小请求大小为8192字节(8KB)。
  8. feign.compression.response.enabled: true:启用响应压缩。Feign会对接收到的响应数据进行解压缩,以还原成原始数据。

查阅资料,定位到该异常是由于Spring Cloud Feign 请求其他微服务时json数据被压缩导致的

三、解决方案

1、减小参数的长度(这种方案看具体场景)
2、关闭请求数据压缩

feign.compression.request.enabled: false
feign.compression.response.enabled: false

3、设置请求压缩的最小请求大小

feign.compression.request.min-request-size: 8192

也就是说只有当请求的参数大于8192,及8kb,才会将参数进行压缩。
当然这个参数大小自定义

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值