spring boot @value 加载 yml map 数据

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);

    }
}
回复
阅读 21.6k
2 个回答
my:
  string: string_value
  map:
    name: name_value
    age: age_value

这个方式编写my.map中map必须是一个对象,如果你需要想这样获取Map的话,

正确写法

@Value("${my.map}")
private Map<String, String> map;

yml文件

my:
  map:{name: name_value, age: age_value}

但是其实这样写非常不友好哦

有一种更加优美的写法:

  1. 创建一个类:
public class User{
    private String name;
    private int age;
     //add get setter 
}
  1. 在该类上加入如上注解:
@Component
@ConfigurationProperties(prefix = "my.map")
  1. yml写法:
my:
  string: string_value
  map:
    name: name_value
    age: age_value
新手上路,请多包涵

@value 好像注入不了map,
必须用@ConfigurationProperties,这种

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏