背景
本人在学习springboot工程尝试读取配置文件中自定义配置参数,定义pojo类Animal,其中包含了4个属性字段,如下
private String name;
private Integer age;
private String sex;
private String color;
在配置文件application.yml
中设置配置参数如下:
animal:
name: 汪汪
age: 3
sex: 男
color: yellow
随后,通过@Value注解进行配置文件读取:
@Component
public class Animal {
@Value("${animal.name}")
private String name;
@Value("${animal.age}")
private Integer age;
@Value("${animal.sex}")
private String sex;
@Value("${animal.color}")
private String color;
// 省略getter和setter方法
}
再通过Controller创建并实例化Animal:
@RestController
public class HelloController {
@Autowired
private Animal animal;
@RequestMapping("/hello2")
public Animal createAnimal(){
return animal;
}
}
问题描述
启动项目,随后报错,报错内容如下:
20:13:18.632 [main] ERROR org.springframework.boot.SpringApplication -- Application run failed
org.yaml.snakeyaml.scanner.ScannerException: mapping keys are not allowed here
in 'reader', line 10, column 8:
sex: ?
^
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchKey(ScannerImpl.java:847)
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:384)
...
我可以确保yml配置文件格式正确,随后奇葩的问题出现了,修改配置文件中sex的值:
animal:
name: 汪汪
age: 3
sex: 男男
color: yellow
哦豁,服务成功起来了,访问测试:
// http://localhost:8090/server01/hello2
{
"name": "汪汪",
"age": 3,
"sex": "男男",
"color": "yellow"
}
问题解决
网上搜索相关问题,通常给出的答案是yml配置文件格式问题,这确实是一个类似问题的解决方案。但我遇到的这个现象并不是这个问题。而是编码格式问题。
工程中的application.yml
由工程创建时application.properties
修改后缀得来,properties文件默认创建格式为ISO-8859-1,所以服务启动报错。
修改文件编码格式为UTF-8,问题不再出现。
建议
建议修改IDEA配置,修改properties文件默认编码格式为UTF-8,若工作需要,请忽略该建议。