Feign调用请求数据过大,传输的JSON被截取导致报错问题

时间:2025-03-22 08:47:34

最近在写代码时,遇到了一个问题。在使用Feign进行服务间调用时,我尝试传递了一个非常大的JSON数据,结果被截取掉了,导致JSON格式不完整,从而引发了错误。错误信息是这样的:

Caused by: : Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, , \t) is allowed between tokens at [Source: (PushbackInputStream); line: 1, column: 2]

我在网上查阅了很多博客,看到有人说需要更改配置文件,类似于下面的示例:

# feign 配置
feign:
  compression:
    request:
      enabled: true
      min-request-size: 8192
    response:
      enabled: true

然而这个方法在我们的项目中并没有起作用。无奈之下,我只能想出一个临时办法,先把数据扔到Redis中,然后在跨服务调用时再从Redis中获取要使用的数据。但这个方法显然不是最佳实践,我只能继续寻找解决方案。

直到晚上下班回家后,我突然有了灵感,既然传输JSON会导致被截取掉报错,那我为什么不直接传输字符串呢?于是立马行动起来,到家开机,巴拉巴拉写了一串代码。首先将要传输的数据经过Base64转码,然后再通过网络进行跨服务调用。

代码编写完成后,我立即启动服务进行验证。然而发现还是报错了。仔细一瞧,原来是请求头内容太大了!于是我想只要解决这个问题,跨服务报错的问题应该就解决了。

于是我在nacos的配置文件中添加了以下配置信息:

server:

 max-http-header-size: 16384

重新启动本地nacos服务器后,然后启动服务进行测试。哇塞!居然成功了!舒服!虽然这个方法可能不是最优解,但至少它解决了我当前的问题。当然,我也希望各位大佬能多多指教,给我提供更好的解决方案。