当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- 2022 NPDP take an examination of how the results?How to query?
- EFCore 反向工程
- OC和Swift语言的区别
- 【CNN记录】tensorflow slice和strided_slice
- Talking about the "horizontal, vertical and vertical" development trend of domestic ERP
- Centos7 install postgresql and enable remote access
- The underlying data structure of Redis
- [Unity entry plan] 2D Game Kit: A preliminary understanding of the composition of 2D games
- 2022-08-01 Reflection
- Scheduled tasks for distributed applications in Golang
猜你喜欢

2022-08-01 mysql/stoonedb slow SQL-Q18 analysis

AWR分析报告问题求助:SQL如何可以从哪几个方面优化?

【LeetCode每日一题】——103.二叉树的锯齿形层序遍历

qt点云配准软件

From 2023 onwards, these regions will be able to obtain a certificate with a score lower than 45 in the soft examination.

CASE2023

Entry name 'org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt' collided

项目场景 with ERRTYPE = cudaError CUDA failure 999 unknown error

FOFAHUB使用测试
![[Unity entry plan] 2D Game Kit: A preliminary understanding of the composition of 2D games](/img/8a/07ca69c6dcc22757156cb615e241f8.png)
[Unity entry plan] 2D Game Kit: A preliminary understanding of the composition of 2D games
随机推荐
Handwritten Blog Platform ~ Day Two
bool框架::PosInGrid (const简历:关键点kp, int &posX, int诗句)
网络层解析——IP协议、地址管理、路由选择
BI - SQL 丨 WHILE
swift project, sqlcipher3 -> 4, cannot open legacy database is there a way to fix it
789. 数的范围
¶ Backtop back to the top is not effective
拼多多借力消博会推动国内农产品品牌升级 看齐国际精品农货
2022-07-30 mysql8 executes slow SQL-Q17 analysis
53. 最小的k个数
十字光标太小怎么调节、CAD梦想画图算量技巧
Garbage Collector CMS and G1
ofstream,ifstream,fstream read and write files
Nanoprobes丨1-巯基-(三甘醇)甲醚功能化金纳米颗粒
【CNN记录】tensorflow slice和strided_slice
Service discovery of kubernetes
Centos7 安装postgresql并开启远程访问
From 2023 onwards, these regions will be able to obtain a certificate with a score lower than 45 in the soft examination.
ros多客户端请求服务
项目后台技术Express
