Spring Boot:无法绑定Yaml列表对象

时间:2018-07-03 08:11:26

标签: spring spring-boot

我需要通过yaml属性文件绑定POJO列表,但是我不走运才能使其工作。 我的application.yml有以下几行:

printer:
  printers:
    - deviceNo: abc
      key: 123

PrinterProperties这样:

@Component
@ConfigurationProperties(prefix = "printer")
class PrinterProperties {
    var printers: List<Printer> = listOf()
}

但是字段printers并未填充application.yml值。

有一个samilar problem

我将演示推送到github repository上来演示此问题。

3 个答案:

答案 0 :(得分:1)

Externalized Configuration页面上的Spring Boot文档所述,您可以绑定示例中的属性,只要它们满足以下条件之一即可:

1)class属性有一个setter

2)用可变值初始化。

listOf()将为您提供一个不变的值,因此它将不起作用。

希望它有所帮助! :)

答案 1 :(得分:0)

printer:
  printers:
    - 
      deviceNo: abc
      key: 123

您的Yaml文件应该是这样的。

答案 2 :(得分:0)

根据安迪·威尔金森(Andy Wilkinson)的建议:POJO应该具有默认的构造函数。所以我用以下方式更改了POJO:

class Printer {
    var deviceNo: String? = null
    var key: String? = null
}

它现在可以工作。