【问题标题】:spring boot: unable to bind yaml list objectsspring boot:无法绑定yaml列表对象
【发布时间】:2018-12-11 11:25:41
【问题描述】:

我需要通过 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 以演示此问题。

【问题讨论】:

  • 我将 POJO 从 kotlin 转换为 java,现在可以使用了
  • @Aymen,回复。您建议的编辑:请,Spring Boot 不是 Java EE 的一部分。这是春天的一部分!

标签: spring spring-boot


【解决方案1】:

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

1) 类属性有一个setter

2) 它被初始化为一个可变值。

listOf() 会给你一个不可变的值,因此它不起作用。

希望对您有所帮助! :)

【讨论】:

  • 我试过了:class PrinterProperties(var printers: List&lt;Printer&gt; = mutableListOf()),但它也不起作用。
  • 你也许可以尝试一些事情: - 删除列表的默认值并添加一个 setter 方法。 - 改为使用new ArrayList&lt;Printer&gt;() 初始化列表。 - 验证您的打印机类的字段名称与 yaml 定义中的字段匹配。这里有一个简单的example,可能有用。
  • 有一个samilar problem
【解决方案2】:

来自 Andy Wilkinson 的建议:POJO 应该有一个默认构造函数。所以我将 POJO 更改为:

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

现在可以使用了。

【讨论】:

    【解决方案3】:
    printer:
      printers:
        - 
          deviceNo: abc
          key: 123
    

    你的 yaml 文件应该是这样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2016-07-13
      • 2019-05-12
      • 2017-02-17
      • 2015-12-12
      相关资源
      最近更新 更多