当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot中将application.yml中的映射注入到字段中?

梁丘高朗
2023-03-14

Spring Boot-从application.yml注入映射

在这个问题上,他们

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

为了将其映射到java代码中,他们建议使用@configurationproperties注释。这个注释的问题是,您必须创建一个new class,然后在上面添加这个注释。

这样说我需要它:

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

上面的代码应该给出一个映射,其中key是build,value是一些带有artifact、name etc等字段的对象(当然,如果这样做有效,我将为此创建一个POJO,而不是将其作为普通对象)。

注意:@configurationproperties对字段不起作用,这就是为什么我想看看是否有一种更精简、更干净的方法来实现这一点。

附注。此外,我也可以使用@configurationproperties并创建一个新类,但我只是想看看是否遗漏了在不创建一个新类的情况下创建一个更简单的方法。

共有1个答案

云瑞
2023-03-14

我知道的唯一方法是用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-dynamics-inject-values-with-springs-value/一节中用Spring的@value注入地图

 类似资料:
  • 问题内容: 我有一个带有以下内容的Spring Boot应用程序-基本上是从这里获取的: 我可以注入特定的值,例如 但是,我想注入整个地图,例如: 那(或类似的东西)可能吗?显然,我可以直接加载yaml,但是想知道Spring是否已经支持了某些东西。 问题答案: 你可以使用插入地图 使用问题中的yaml运行它会产生: 有多种选项可用于设置前缀,控制如何处理缺少的属性等。有关更多信息,请参见java

  • 我有一个带有以下的spring boot应用程序--基本上取自这里: 我可以注入特定的值,例如。 然而,我想注入整个地图,即如下所示: 那(或类似的事情)可能吗?显然,我可以直接加载yaml,但我想知道spring是否已经支持了一些东西。

  • 我有下面的映射器类,我想在其中使用。我正在尝试构造函数注入,但不起作用,并且正在打印。 mapStruct实现类 如果我使用使用字段注入,这样它就可以正常工作。这意味着Spring不支持类的构造函数注入。是因为类不能直接实例化,需要子类来实例化吗? 有没有什么方法可以在实现类中创建一个构造函数,如下所示: 这样,构造函数注入应该可以工作。

  • 我正在尝试将yml文件映射到Spring boot应用程序中具有字符串键和PromotionPolicy值的HashMap,并使用默认的Spring boot实现来解析这些值,但当我尝试从映射中读取值时,PromotionPolicy对象只包含所有实例的默认值[0,false,false]。 我的yml是: 我拥有的模型是: 组件java类如下: 尝试在此处显示值: 我的输出如下: 而我希望结果包

  • 到底是怎么回事? 提前谢了。

  • 我在寻找更“改进的方法”来实现这一点,我有一种方法,从一个id中获取所有记录,然后“映射”到一个类中,我有大约200个“标记”要映射,这将是一个非常长的if链。。。例子: