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

将yml中的列表映射到Scala中的对象列表(Spring Boot)

云欣嘉
2023-03-14

背景:

我已经阅读了大量关于如何使用ConfigurationProperties从config中读取列表的示例。。见下文

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

...还有更多。

我无法在Scala中实现这一点。我想从应用程序中获取组织(id和名称)的列表。yml,但它总是返回一个空列表。

应用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个答案

扈瑞
2023-03-14

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

  1. 将列表更改为数组
  2. 重写类,使其具有字段而不是构造函数参数
  3. 介绍scala。豆子。Bean属性

工作代码:

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 = _
  }
}
 类似资料:
  • 我正在尝试在我的应用程序中注入列表。我的Spring Boot应用程序中Java对象列表的yml文件。 我已经看到了其他类似问题的一些答案,这些问题将Yaml中的列表映射到Spring Boot中的对象列表,但我有不同的输出错误。 我的YAML文件 我还创建了Bucket类 以及我的配置类,我在其中将列表注入YAML 当Spring Boot开始执行时,我出现以下错误: 我也尝试过简单的字符串列表

  • YAML文件: 配置类: 我希望@value注释允许我注入相应的属性值,但这似乎不起作用(注入'id'字段似乎工作得很好)。

  • 问题内容: 在我的Spring Boot应用程序中,我具有以下内容的application.yaml配置文件。我想将其作为带有通道配置列表的Configuration对象注入: 我想用PaymentConfiguration对象列表填充@Configuration对象: 我使用@Autowired构造函数将其作为普通bean注入。xyz的值正确填充,但是当Spring尝试将yaml解析为对象列表时

  • 有什么线索吗?这里出了什么问题?

  • 给定: 我想把所有的车都标出来。将轮胎分为单独的轮胎板。我知道我可以做一个

  • 下面是我的DTO。 源DTO 目标DTO