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

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

背景


在一个定时任务中,每隔一个小时会调用远程接口进行数据同步。本着“先实现,再优化”的原则,刚开始实现方式是在循环里每次调用远程接口,传入单条记录,因为每次都需要完成建立连接、数据传输、断开连接的操作,这样的话比较耗费网络与连接资源;后来测试没问题后,就改成了在循环完成后传入一个 List 进行批量操作,然后问题出现了。


10:12:28.881 [http-nio-8200-exec-3] ERROR c.y.c.s.h. GlobalExceptionHandler - [handleRuntimeException, 82] - 请求地址'/doit', 发生未知异常.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


环境信息


用到的 OpenFeign 的版本信息:

image.png


问题分析


为什么每次传一条数据可以,但是传输列表的时候就出错了呢?


结合以前配置 Nginx 时的 gzip 压缩的经验,感觉这跟 Feign 的压缩配置有关系。可参考官方文档:docs.spring.io/spring-clou…


此时, Feign 的配置如下:

# feign 配置
feign:
  sentinel:
    enabled: true
  okhttp:
    enabled: true
  httpclient:
    enabled: false
  client:
    config:
      default:
        connectTimeout: 10000
        readTimeout: 10000
  compression:
    request:
      enabled: true
    response:
      enabled: true

从配置中,我们可以了解到当前配置开启了请求与响应的压缩功能。我们知道,什么时候进行压缩其实跟请求体的大小有关,如果本身请求的数据体较小,完全可以不进行压缩直接传输即可,这样可以节省压缩用的 CPU 资源;那么我们可以大胆地猜测:压缩是有一个阈值的,超过某个阈值才会进行压缩。这可以解释前面的疑问:为什么每次传一条数据可以,但是传输列表的时候就出错了呢?


解决方法


明确了问题的原因,解决起来就比较容易了。我们可以简单粗暴地将压缩关闭即可。。

image.png

Note:由于改成了批量传输的方式,导致业务处理耗时较长,在请求发起端可能出现"Timed out.."这类错误。这里的配置将 HTTP 连接的超时时间由10s修改成了60s;等数据同步完成,再改回来。


目录
相关文章
|
11天前
|
存储 JSON 安全
商品详情(item getAPI接口)json数据格式参考
某东商品详情(item get API接口)的JSON数据格式参考如下
|
15天前
|
JSON API 数据格式
商品详情(item getAPI接口)json数据格式参考
淘宝商品详情(item get API接口)返回的JSON数据格式是一个复杂且灵活的结构,包含多个字段和对象。以下是一个简化的JSON数据格式参考:
|
18天前
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应
|
8天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
1月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
2月前
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
2月前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
141 2
|
3月前
|
JSON 前端开发 JavaScript
JSON parse error: Cannot deserialize value of type `java.lang.Integer` from Boolean value
这篇文章讨论了前端Vue应用向后端Spring Boot服务传输数据时发生的类型不匹配问题,即后端期望接收的字段类型为`int`,而前端实际传输的类型为`Boolean`,导致无法反序列化的问题,并提供了问题的诊断和解决方案。
JSON parse error: Cannot deserialize value of type `java.lang.Integer` from Boolean value
|
4月前
|
JSON 文字识别 数据格式
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
|
3月前
|
JavaScript
NodeJs——Parsing error: Cannot read file '.../tsconfig.json'.eslint
NodeJs——Parsing error: Cannot read file '.../tsconfig.json'.eslint
34 0