报错环境:
代码语言:javascript复制<spring-boot.version>2.6.4</spring-boot.version>
<spring-cloud.version>2021.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
<alibaba.nacos.version>2.0.4</alibaba.nacos.version>
<fastjson.version>1.2.83</fastjson.version>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.1</version>
报错信息:
一个查询资讯接口,请求后,发现aop处,操作日志记录无法正常插入数据库,但是其他接口没有问题,并且报错输出以下内容:
Caused by: 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]
报错原因:
nacos 注册中心application-dev.yaml
中配置了compression
(压缩)的配置:
spring:
compression:
request:
enabled: true // 这个引发的问题
response:
enabled: true
经过百度,发现因为gzip编解码的问题导致了报错。
解决方式:
1、最简单的方式是将其设置为false,不对请求进行压缩(但是是否会引发其他的问题,暂且不得知),本地测试,有效。
代码语言:javascript复制spring:
compression:
request:
enabled: false
response:
enabled: true
百度到说设置feign.compression.response.useGzipDecoder为true即可生效,但是本地测试,无效。
代码语言:javascript复制spring:
compression:
request:
enabled: true // 这个引发的问题
useGzipDecoder: true //无效
response:
enabled: true
百度到说因为json数据过大,配置参数,设置大一点即可,本地测试,无效。
代码语言:javascript复制request:
enab led: true
mime-types: text/xml,application/xml,application/json
# 单位是字节(b)
min-request-size: 5120
2、新增过滤器,专门处理Content-Encoding为gzip的请求。(这个需要自行研究处理)
参考链接
debug过程参考链接 https://www.jianshu.com/p/df37eb5f2169