【问题标题】:How to inject a map from application.yml into a field in Spring Boot?如何将 application.yml 中的地图注入 Spring Boot 中的字段?
【发布时间】:2020-03-01 05:00:35
【问题描述】:

这是参考这个问题。

Spring Boot - inject map from application.yml

在那个问题上,他们有

info:
   build:
      artifact: ${project.artifactId}
      name: ${project.name}
      description: ${project.description}
      version: ${project.version}

要将其映射到他们的 java 代码中,他们建议使用 @ConfigurationProperties 注释。这个注解的问题是你必须创建一个New Class 然后在它上面添加这个注解。

但是我可以像@Value 注释那样直接将它放到一个字段中吗?

在这里说我需要它:

// Someannotation or any other lean and clean way to get this
@Someannotation("${info}")
private Map<String, Object> map;

上面的代码应该给我一个映射,其中键是build,值是some Object with fields like artifact, name etc(当然,如果这可行,我会为此创建一个POJO,而不是将其保留为普通对象)。

注意:@ConfigurationProperties 不适用于字段,这就是为什么我想看看是否有更精简和更清洁的方法来做到这一点。

附:我也可以使用@ConfigurationProperties 并创建一个新类,但我只是想看看我是否是missing out,以一种更简单的方式来执行此操作,而无需完全创建一个新类。

【问题讨论】:

  • 我当然知道,所以这个问题。我想看看是否有另一种方法similar to @Value,而不必创建一个新类然后在@ConfigurationProperties 上拍打。

标签: java spring spring-boot yaml


【解决方案1】:

我知道这样做的唯一方法是以 JSON 格式定义值部分:

app.collection.map.string.to.integer={one:"1", two:"2", three:"3"}

然后注入

@Value("#{${app.collection.map.string.to.integer}}")
private Map<String, Integer> mapStringToInteger;

来自https://relentlesscoding.com/2018/09/09/spring-basics-dynamically-inject-values-with-springs-value/ 部分 Inject Maps With Spring's @Value

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 2019-05-09
    • 2019-02-04
    • 2018-01-04
    • 1970-01-01
    • 2014-12-22
    • 2016-04-18
    • 2017-10-08
    • 2019-12-14
    相关资源
    最近更新 更多