spring boot 中使用 @value 能自动注入属性值简化了很多操作,但是注入 Map 类型时却不行。
使用 @ConfigurationProperties 的方式可以实现,但是增加了一点复杂度。
Map 值设置成 json 字符串也能实现,但是减低了可读性。
请问有什么办法能够让 @value 也能注入 Map?
期望如下方式
@Value("${my.map}")
private Map<String, String> map;
但是报错提示 Could not resolve placeholder 'my.map' in value "${my.map}"
application-dev.yml
my:
string: string_value
map:
name: name_value
age: age_value
Application
@SpringBootApplication
public class Application extends SpringBootServletInitializer implements ApplicationRunner {
@Autowired
private MyMap myMap;
@Value("${my.string}")
private String stringValue;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(stringValue);
System.out.println(myMap);
}
}
这个方式编写my.map中map必须是一个对象,如果你需要想这样获取Map的话,
正确写法
yml文件
但是其实这样写非常不友好哦
有一种更加优美的写法: