当前位置:网站首页>The feign call fails, JSON parse error Illegal character ((CTRL-CHAR, code 31)) only regular white space (r
The feign call fails, JSON parse error Illegal character ((CTRL-CHAR, code 31)) only regular white space (r
2022-07-31 05:52:00 【m0_67401499】
背景:feign调用不通,报错,困了我快一个月!!!可恶,中间花了两天解决,把百度都试了一遍,都没有用,都快哭了,现在说下解决过程.
①开始我打开了日志进行进一步查看报错信息,需要在feign使用配置文件中加入日志级别,日志级别是FULL,并在配置文件中也加入日志级别.


②然后发现报错404 not found,开始以为是参数不够,被调用为三个参数,调用时传两个参数,加上了之后还是报错,然后发现是注解用错了,之前用的是@PathVariable(复制过来没有改),使用@RequestParam后错误改变(低级错误).
③报错:nested exception is com.fasterxml.jackson.core.JsonParseException: Illegal character ((CTRL-CHAR, code 31)): only regular white space ( , , ) is allowed between tokens
at [Source: (ByteArrayInputStream); line: 1, column: 2].

④然后feign调用接口,使用String接收,把字符串打印出来,发现乱码了???

还发现传回来是二进制数据??
然后开始了疯狂的百度中,中间试了无数次,各种加什么配置,去掉压缩之类的都不行,还有加过滤器什么的也不行.
最后终于在一个大哥的文章中发现了答案,他和我一样是打印出来发现乱码,这个问题就是gzip接收到的还是压缩数据,所以乱码,还是试了一下他说没用的配置,结果对我有用!!!!!(他下面真正对她有用的方法对我没用,也是加拦截器)
答案:在配置文件中加入feign.compression.response.useGzipDecoder为true即可.
⑤乱码的事情没了,发现只有中文乱码了,靠!!!!!!又整了我好久好久,百度的所有方案都试过了,还看了feign日志所有参数,好像也没问题的,人都快哭了,终于找到了解决方案.
@Configuration
public class FeignConfig implements RequestInterceptor {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
@Bean
public Decoder feignDecoder() {
return new ResponseEntityDecoder(new SpringDecoder( () -> {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter() {
@Override
public Object read(Type type, Class<?> contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
Object result=null;
if ("java.lang.String".equals(type.getTypeName())) {
result= StreamUtils.copyToString(inputMessage.getBody(), Charset.forName("utf8"));
} else {
result=super.read(type, contextClass, inputMessage);
}
return result;
}
};
return new HttpMessageConverters(fastConverter);
}));
}
@Override
public void apply(RequestTemplate requestTemplate) {
try {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
if (null != servletRequestAttributes) {
HttpServletRequest request = servletRequestAttributes.getRequest();
// 获取所有头文件信息的key
Enumeration<String> headerNames = request.getHeaderNames();
if (null != headerNames) {
while (headerNames.hasMoreElements()) {
// 获取头文件的key和value
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
// 跳过content-length,不然可能会报too many bites written问题
if ("content-length".equalsIgnoreCase(headerName)) {
continue;
}
// 将令牌数据添加到头文件中,当用feign调用的时候,会传递给下一个微服务
requestTemplate.header(headerName, headerValue);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
参考:Feign乱码 - 知乎
答案:加了个解码器,转成utf8就可以了.
边栏推荐
- Detailed explanation of pointers in C language
- [windows]--- SQL Server 2008 super detailed installation tutorial
- Common JVM interview questions and answers
- 字符串的扩展
- uni-app进阶之样式框架/生产环境【day10】
- What is an EVM Compatible Chain?
- 【云原生】微服务Nacos的简单介绍与使用
- NFTs: The Heart of Digital Ownership
- The MySQL database in Alibaba Cloud was attacked, and the data was finally recovered
- 带你搞懂MySQL隔离级别,两个事务同时操作同一行数据会怎样?
猜你喜欢

闭包(五)----一个常见的循环

leetcode-每日一题735. 行星碰撞(栈模拟)

元宇宙的前景及四大赛道

10 【组件编码流程 组件自定义事件 全局事件总线】

The process and specific code of sending SMS verification code using flask framework
![[Ubuntu20.04 installs MySQL and MySQL-workbench visualization tool]](/img/3d/1b65fb33bfbf22da8243df1ab33ed5.png)
[Ubuntu20.04 installs MySQL and MySQL-workbench visualization tool]

【C语言3个基本结构详解——顺序、选择、循环】

03 【数据代理 事件处理】

leetcode-每日一题558. 四叉树交集(分治递归)

NFTs: The Heart of Digital Ownership
随机推荐
【windows】--- SQL Server 2008 超详细安装教程
2021 Mianjing - Embrace Change
C语言文件读、写、定位函数
字符串的扩展
初涉C语言
"limit" query in Oracle database
正则表达式基础知识
【Elastic-Job源码分析】——作业监听器
win11中利用IIS10搭建asp网站
【数据库学习】Redis 解析器&&单线程&&模型
【云原生】微服务Nacos的简单介绍与使用
Object,多态 1(第八天)
闭包(三)----执行环境
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法
利用phpstudy搭建DVWA
uni-app进阶之模版语法与数据绑定【day7】
字符串的新增方法
[windows]--- SQL Server 2008 super detailed installation tutorial
MySQL-如何分库分表?一看就懂
工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息
