YAMLException异常产生原因及解决方案
01 异常发生场景
- 当我在使用一个插件优化swagger文档时
- 突然yml的中文全变成了乱码,在idea里的文件也从绿色图标变成了红色,我看到yml文件上方有一个设置文件编码的选项,我就随意的设置为了GBK,图标变回绿色图标,注释中的乱码也变回中文,我也没太在意,毕竟代码跑着跑着就是会出莫名其妙的问题
- 以下是yml文件的代码
server:
port: 8080
servlet:
context-path: /web
# 配置数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/text012?userSSL=false;serverTimezone=Asia/Shanghai
username: root
password: 1234
mvc:
pathmatch:
matching-strategy: ant_path_matcher
# 配置mybatis
mybatis:
# mapper配置文件
mapper-locations: classpath:mapper/*.xml
# resultType别名,没有这个配置resultType包名要写全,配置后只要写类名
type-aliases-package: com.example.demo.com.mashang.dao
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
- 但是当我启动时,它报了一个YAMLException异常,程序直接终止了
02 异常的产生原因
-
我第一反应就是swagger的优化插件knife4j有问题,于是把它删掉再测试了一遍,很可惜还是寄了,代码还是报YAMLException异常,程序依旧终止
-
所以问题还是出在yml文件的编码问题
-
这个YAMLException异常算是个比较奇怪的问题了,明明没做什么,yml的编码就莫名其妙改了
03 解决方式
- 设置项目的默认编码,步骤如下
1.在左上角的file中选择setting
2.在搜索框中搜索File encodings
4.把Global encoding和Project encoding设置为UTF-8
- 全局编码和项目编码一般使用的都是utf-8
5.default encoding for properties files设置为UTF-8
6.transparent native-to-ascii conversion打钩
7.在create utf-8 file选项中选with no bom
- utf-8编码默认是不需要bom的