当前位置:网站首页>feign调用不通问题,JSON parse error Illegal character ((CTRL-CHAR, code 31)) only regular white space (r
feign调用不通问题,JSON parse error Illegal character ((CTRL-CHAR, code 31)) only regular white space (r
2022-08-02 02:25:00 【m0_67392661】
背景: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就可以了。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- OC中成员变量,实例变量和属性之间的区别和联系
- 罗德里格斯公式(Rodrigues‘ Rotation Formula)推导
- PHP live source code to achieve simple barrage effect related code
- Scheduled tasks for distributed applications in Golang
- Nanoprobes Polyhistidine (His-) Tag: Recombinant Protein Detection Protocol
- TKU remembers a single-point QPS optimization (I wish ITEYE is finally back)
- 数值积分方法:欧拉积分、中点积分和龙格-库塔法积分
- 项目后台技术Express
- 【CNN记录】tensorflow slice和strided_slice
- 项目场景 with ERRTYPE = cudaError CUDA failure 999 unknown error
猜你喜欢

【web】理解 Cookie 和 Session 机制

Project Background Technology Express

【 wheeled odometer 】
![[LeetCode Daily Question]——654. The largest binary tree](/img/05/0af1c6dc0085e253c0758c8da63e52.png)
[LeetCode Daily Question]——654. The largest binary tree

Pinduoduo leverages the consumer expo to promote the upgrading of domestic agricultural products brands and keep pace with international high-quality agricultural products

The underlying data structure of Redis

Nanoprobes免疫测定丨FluoroNanogold试剂免疫染色方案

MySQL8 download, start, configure, verify

Win Go development kit installation configuration, GoLand configuration

项目场景 with ERRTYPE = cudaError CUDA failure 999 unknown error
随机推荐
[ORB_SLAM2] SetPose, UpdatePoseMatrices
Redis for distributed applications in Golang
How to adjust the cross cursor too small, CAD dream drawing calculation skills
"NetEase Internship" Weekly Diary (1)
使用DBeaver进行mysql数据备份与恢复
Nanoprobes Polyhistidine (His-) Tag: Recombinant Protein Detection Protocol
Electronic Manufacturing Warehouse Barcode Management System Solution
[Server data recovery] Data recovery case of server Raid5 array mdisk disk offline
【web】Understanding Cookie and Session Mechanism
Pinduoduo leverages the consumer expo to promote the upgrading of domestic agricultural products brands and keep pace with international high-quality agricultural products
【Unity入门计划】2D Game Kit:初步了解2D游戏组成
ofstream,ifstream,fstream read and write files
From 2023 onwards, these regions will be able to obtain a certificate with a score lower than 45 in the soft examination.
十字光标太小怎么调节、CAD梦想画图算量技巧
数值积分方法:欧拉积分、中点积分和龙格-库塔法积分
JVM调优实战
NIO's Sword
AWR分析报告问题求助:SQL如何可以从哪几个方面优化?
LeetCode brush diary: LCP 03. Machine's adventure
C#测试项目中属性的用法
