【问题标题】:Mapping list in yml to list of objects in Scala (Spring Boot)将 yaml 中的列表映射到 Scala 中的对象列表(Spring Boot)
【发布时间】:2019-07-25 14:37:17
【问题描述】:

背景:

我已经阅读了很多关于如何使用ConfigurationProperties从配置中读取列表的示例。见下文

  1. Mapping list in Yaml to list of objects in 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;
        }

    }

}

返回两个组织的列表

【问题讨论】:

    标签: java spring scala


    【解决方案1】:

    我设法解决了这个问题。这是我所做的:

    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 = _
      }
    }
    

    【讨论】:

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