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

Spring boot yaml属性绑定:集合类型

尹赞
2023-03-14

我发现Spring Boot(或者一般的Spring)对yaml集合的处理有点奇怪。根据yaml规范的集合应该写在。yaml文件中,如下所示:

myCollection: ['foo', 'bar'] 

myCollection:
  - foo
  - bar

但是@value(“${myCollection}”)注释或environment.getproperty(“myCollection”,string[].class)(也尝试list.class)都不能读取集合属性(返回null)。我所知道的唯一有效的方法是使用Spring Boot文档中描述的@configurationproperties注释。

    null

所以,我的问题是--如果我不能使用@configurationproperties的话,什么是读取集合类型属性的好方法?同样奇怪的是,为什么逗号分隔格式有效,而不是YAML风格的集合。

编辑:更正了一些错别字

共有1个答案

谢和同
2023-03-14

坦率地说,Spring boot application.properties和application.yaml或application.yml是用来加载配置属性的。

@configurationproperties注释被设计为一种抽象,用于隐藏配置属性的实现,并支持。properties和。yaml/.yml。

但是,对于YAML/YML,Spring使用下面的org.yaml.snakeyaml.yaml库来解析文件,并将其加载到org.springframework.boot.env.yamlPropertySourceLoader中的properties对象,并且集合映射为,而不是数组或列表。所以你试着做下面的事情;

Environment.getProperty("myCollection", Set.class)
 类似资料:
  • 我试图将子类属性绑定到GridViewColumn。我有一个母类M1和三个不同的子类S1、S2和S3。GridViewColumn由类M1的对象填充。我希望将S2的一个属性绑定到这个GridViewColumn的头,而M1中没有实现这个属性。 有人能给我解释一下怎么做吗?

  • 我尝试使用来表示一组相同的输入,保存输入应该绑定到的属性。 我在组件中使用属性代理到实际的存储位置,但我的理解是属性应该与普通属性相同(使用普通属性具有相同的单向绑定行为)。 那么,如何正确地迭代一组要绑定到的属性呢?

  • 我想通过使用@ConfigurationProperties注释将我的Application.Properties自动绑定到一个类中。首先,我尝试了@value注释,并能够将属性值注入类变量。但是,@ConfigurationProperties没有将属性注入到值中。 我的应用程序.属性: application.java ConfigBinder.java 输出: 这样的执行到底出了什么问题?

  • 我有以下代码: 生日属性的类型为java.time。LocalDate,并且属于类Person。因为我使用JPA,所以我不想使用JavaFX属性。上述代码无法编译。编译器的错误消息是: 我该如何解决这个问题? 更新:我的个人类具有以下代码: 控制器类:

  • 在我的XAML中: 我的gridviewcolumn的可见性现在应该取决于我的集合项的“isVisible”的值。那件事可能吗?

  • servlet 可以按名称绑定对象属性到 HttpSession 实现,任何绑定到会话的对象可用于任意其他的 servlet,其属于同一个 ServletContext 且处理属于相同会话中的请求。 一些对象可能需要在它们被放进会话或从会话中移除时得到通知。这些信息可以从 HttpSessionBindingListener 接口实现的对象中获取。这个接口定义了以下方法,用于标识一个对象被绑定到会