【问题标题】:Need help figured out how to load nested list from yml in spring boot java app需要帮助弄清楚如何在 Spring Boot Java 应用程序中从 yml 加载嵌套列表
【发布时间】:2015-11-13 18:07:07
【问题描述】:

我有一个这样的 yaml 文件设置:

system:
  locators:
  - first.com
    - 103
    - 105
  - second.com
    - 105

我想将其加载为@autowired 配置,如下所示:

@Autowired
List<Locator> locators;

我认为 Locator 类应该是这样的:

class Locator {
    String name;
    List<String> ports;
}

但我不确定如何将这一切放在一起。任何帮助表示赞赏!

【问题讨论】:

    标签: java spring-boot yaml


    【解决方案1】:

    首先,我认为您的 yaml 文件结构无效。在您的 Locator 类中,您已经为字段命名 - 您应该在 yaml 文件中执行相同操作。最后应该是这样的:

    system:
      locators:
      - name: first.com
        ports:
          - 103
          - 105
      - name: second.com
        ports:
          - 105
    

    其次,您可以利用 Spring Boot 相当先进的 properties-to-bean 自动映射。与每个 Spring Boot 应用程序一样,您需要使用 @SpringBootApplication 注释您的主类。然后,您可以创建一个代表您的属性结构的类:

    @Configuration
    @ConfigurationProperties(prefix = "system")
    public class SystemProperties {
    
        private List<Locator> locators;
    
        public List<Locator> getLocators() {
            return locators;
        }
    
        public void setLocators(List<Locator> locators) {
            this.locators = locators;
        }
    
        public static class Locator {
            private String name;
            private List<String> ports;
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public List<String> getPorts() {
                return ports;
            }
    
            public void setPorts(List<String> ports) {
                this.ports = ports;
            }
    
        }
    
    }
    

    注意@ConfigurationProperties 注释,它定义了这个类的映射配置的根前缀。它当然可以是 yaml 属性树中的任何节点,不一定是您的情况的主级别。

    为了进一步阅读,我建议使用blog postofficial documentation,因为在属性 bean 映射方面有更多强大的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      相关资源
      最近更新 更多