场景还原
有小伙伴反应SpringBoot项目启动异常,但是同组其他伙伴的无问题!
java
ERROR org.springframework.boot.SpringApplication -
Application run failed
org.yaml.snakeyaml.error.YAMLException:
java.nio.charset.MalformedInputException : Input length = 1
根据异常信息提示,一般是YAML配置文件格式或编码集有问题。
- yml配置文件不是UTF-8的格式
- 配置中含有中文注释导致的
异常原因
java.nio.charset
定义用来在字节和 Unicode
字符之间转换的 charset
、解码器和编码器。
java.nio.charset.MalformedInputException异常表示输入的字符流或字节流无效,即无法解析。
YAML文件是一种文本文件,它使用Unicode字符集编码存储数据。常见的编码格式有UTF-8、UTF-16等。
在SnakeYAML库中,当解析YAML文件时,如果文件的编码格式与解析器的期望不符,就会抛出这个异常。
解决方案
项目的编码格式一般统一为UTF-8
编码集修改
- 将IDEA的编码设置全部设置为UTF-8
- 如果1没办法解决还是报同样的错,那么在pom中加入如下配置
java
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>1.8</java.version>
</properties>
重新配置yml文件
有两个解决思路:
-
将yml配置文件中的中文注释全部删除
但是本来是需要注释才能对各类配置做特定解释,所以不建议
-
新建一个配置文件为UTF-8的文件,将原有配置使用txt文件夹打开,再重新复制到新的yml配置文件中
-
如果团队的就复制其他小伙伴的,或者是以前正常运行项目的文件
以上两种方式全部尝试过依然失败告终。
JDK版本修改
仔细检查发现他们小组间未统一JDK版本,有成员尝试新特性jdk11 17 21
忘记改回
重新配置JDK版本后,程序正常运行并访问成功!
正常启动效果
java
// 大威天龙,大罗法咒,般若诸佛,般若巴嘛轰。哼!雕虫小技,竟敢班门弄斧,大威天龙!//
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //