簡體   English   中英

將yml中的列表映射到Scala中的對象列表(Spring Boot)

[英]Mapping list in yml to list of objects in Scala (Spring Boot)

背景:

我已經閱讀了一些有關如何使用ConfigurationProperties從config讀取列表的示例。

  1. 將Yaml中的列表映射到Spring Boot中的對象列表
  2. https://github.com/konrad-garus/so-yaml
  3. https://www.boraji.com/spring-boot-configurationproperties-example

.. 和更多。


我無法在Scala中實現此功能。 我想從application.yml獲取組織列表(ID和名稱),但是它總是返回一個空列表。

application.yml

org-registry-list:
  organisations:
    -
      orgId: 1
      orgName: "Google"
    -
      orgId: 20
      orgName: "Microsoft"

這是我在Scala中的嘗試:

@Configuration
@ConfigurationProperties(prefix = "org-registry-list")
class OrgRegistryConfiguration {
  var organisations : List[Organisation] = List.empty
}

object OrgRegistryConfiguration {
  case class Organisation(orgId: Long, orgName: String)
}

返回List()


這適用於以下Java代碼:

@Configuration
@ConfigurationProperties(prefix = "org-registry-list")
public class OrgRegistryConfiguration {

    private List<Organisation> organisations;

    public OrgRegistryConfiguration(List<Organisation> organisations) {
        this.organisations = organisations;
    }

    public OrgRegistryConfiguration() {
    }

    public List<Organisation> getOrganisations() {
        return organisations;
    }

    public void setOrganisations(List<Organisation> organisations) {
        this.organisations = organisations;
    }

    public static class Organisation {

        private long orgId;
        private String orgName;


        public Organisation(long orgId, String orgName) {
            this.orgId = orgId;
            this.orgName = orgName;
        }

        public Organisation() {}

        public long getOrgId() {
            return orgId;
        }
        public void setOrgId(long orgId) {
            this.orgId = orgId;
        }

        public String getOrgName() {
            return orgName;
        }
        public void setOrgName(String orgName) {
            this.orgName = orgName;
        }

    }

}

返回兩個組織的列表

我設法解決了這個問題。 這是我所做的:

  1. List更改為Array
  2. 重寫類以使其具有字段而不是構造函數參數
  3. 介紹scala.beans.BeanProperty

工作代碼:

import scala.beans.BeanProperty

@Configuration
@ConfigurationProperties(prefix = "org-registry-list")
class OrgRegistryConfig() {
  @BeanProperty
  var organisations: Array[Organisation] = _
}

object OrgRegistryConfig {
  class Organisation() {
    @BeanProperty
    var orgId: Long = _
    @BeanProperty
    var orgName: String = _
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM