记一次使用Windows 10部署微服务踩的坑:使用feign远程调用接口报错编码格式问题

记一次使用Windows 10部署微服务踩的坑:使用feign远程调用接收返回结果报错Invalid UTF-8 start byte 0xb9


背景



由于种种原因不得不选择在闲置pc部署微服务作为开发环境,总而言之,此乃下下策。

系统:Windows 10 家庭中文版

处理器:AMD Ryzen 7 5800H

JDK:1.8.0_331

问题描述:服务A使用feign调用服务B,接收返回结果时报错failed and no fallback available,具体原因:

Caused by: feign.codec.DecodeException: Error while extracting response for type [class java.lang.Object] and content type [application/json;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Invalid UTF-8 start byte 0xb9; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xb9
at [Source: (ByteArrayInputStream); line: 1, column: 2708]
Caused by: feign.codec.DecodeException: Error while extracting response for type [class java.lang.Object] and content type [application/json;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Invalid UTF-8 start byte 0xb9; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xb9
at [Source: (ByteArrayInputStream); line: 1, column: 2708]

可以看到提示:无效的UTF-8起始字节0xb9,检查了服务B的日志是按预期执行并正常返回了的。



尝试解决


因为这套代码是经过多次生产验证了的,遂查看了代码改动记录,发现最近半年都是没有改动的;调用云上开发环境也是正常的。遂跳过了检查feign相关配置,可以认为feign配置是正确无误的。


那就是环境的问题了?


因为是使用的Windows部署,怀疑数据传输过程中所使用的编码问题,还是对feign接口的配置进行了调整:

尝试将该值调整为APPLICATION_JSON_UTF8_VALUE。ps:提示过时了,但因为是用的Win10部署,试试看。

报错依旧不变…


先排除jar包的编码问题吧,把jar包放到我所使用的mac中运行,一切正常…那还是Win10的锅了。


联系同事使用Windows打个包看看。报错依旧不变…...


电脑的问题?看看电脑有什么不一样,系统是常规系统,发现电脑CPU是AMD,好像找到了罪魁祸首,询问同事那边也是AMD…给苏妈道歉,原谅我2024年了时不时还持有对AMD的偏见。


不偷懒了,给这个Win10装一个IDEA吧。WHAT???IDEA直接启动代码能正常运行!


用maven打个包看看,这个电脑使用的是maven 3.8.x,而我司常用的是3.6.3,保险起见压缩一下拿过来吧,保持一样的版本。打包完成,java -jar xxx.jar 启动,Swagger调用,报错依旧不变…


那是命令行编码的问题了?


使用PowerShell试试?

报错依旧不变…


使用Git Bash试试?

报错依旧不变…


因为不是自己电脑,那JDK安装的是不是有问题?重新安装JDK后,报错依旧不变…(其实这一步是病急乱投医了,idea启动正常证明jdk没问题)


问了下大模型,也是让检查编码。

936对应是GB2312,不是UTF-8。


查看Mac命令的编码是UTF-8,那能解释为啥同样的jar,mac能正常运行,Win10报错了,编码格式是不一样的。


给启动命令指定使用UTF-8编码试试:

`java -jar xxx.jar -Dfile.encoding=UTF-8`


命令行窗口输出的中文乱码了,不管了,先调用接口看看,能正常运行了!!!不容易啊。



复盘


为什么使用idea能正常运行?

可以看到idea右下角,不管Mac、Windows的idea默认的编码格式都是UTF-8。

什么情况下,使用Windos部署服务都是下策!!

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP