java - 如何将 application.yml 中的映射注入(inject)到 Spring Boot 中的字段中?

标签 java spring spring-boot yaml

这是针对这个问题的。

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;

上面的代码应该给我一个 map ,其中键是build,值是某个带有工件、名称等字段的对象(当然,如果这有效,我会为此创建一个 POJO,而不是将其保留为普通对象)。

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

附注另外,我可以使用 @ConfigurationProperties 并创建一个新类,但我只是想看看我是否错过了一种更简单的方法来执行此操作,而无需创建完全是一个新的类。

最佳答案

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

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

然后注入(inject)

@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/使用Spring的@Value注入(inject)映射

部分

关于java - 如何将 application.yml 中的映射注入(inject)到 Spring Boot 中的字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58700868/

相关文章:

java - JComboBox不显示更新的模型,如何刷新组合框

java - 获取删除触发器的当前用户 - Spring MyBatis - Liquibase

java - 在单独的注释中测试配置注释

java - Spring Controller中的init方法(注解版)

spring-boot - 删除预测中的 Spring 数据休息自链接模板

spring-boot - Spring Cloud Gateway 和 TokenRelay 过滤器

java - 如何使用所有依赖项从命令行编译 Maven 项目?

java - MapBinder 在 Guice 3.0 中不可用

java - 如何使用扩展类中的字段创建 HQL 查询

java - 如何在 spring boot 应用程序中配置 PageableHandlerMethodArgumentResolver