2017-02-09 69 views
1

我想在我的Spring Boot 1.5.1项目中设置并使用YAML作为配置文件。春季启动YAML配置不读取所有值

我YAML文件看起来像如下:

hue: 
    user: cdKjsOQIRY8hqweAasdmx-WMsn 
    ip: "http://192.168.1.69" 
    scenes: 
     sunstatus: 
      enabled: true 
      id: 93yv8JekmAneCU9 
      group: 1 
     disable: 
      enabled: true 
      id: 93yv8JekmAneCU9 
      group: 6 

这工作完全正常读取hue.getUser()。但是,hue.getScenes()由于某种原因返回null。 [色调配置我的Java代码如下所示:

@Configuration 
@ConfigurationProperties(prefix = "hue") 
public class Hue { 
    private String user; 
    private String ip; 
    private Scenes scenes; 

    /* 
    * Getters and setters of course 
    */ 

    public class Scenes { 
     private Sunstatus sunstatus; 
     private Disable disable; 

     /* 
     * Getters and setters 
     */ 

     public class Sunstatus { 
      private boolean enabled; 
      private String id; 
      private String group; 

      /* 
      * Getters and setters 
      */ 
     } 

     public class Disable { 
      private boolean enabled; 
      private String id; 
      private String group; 

      /* 
      * Getters and setters 
      */ 
     } 
    } 
} 

我试着以及标注前缀的每个类为好,无论是在hue.scenes.sunstatus,scenes.sunstatus的格式和只是sunstatus以及。

此外,我还试图使用@Value注释有点没有任何运气。

如果我将数据保存在application.yml或外部文件中,结果是一样的。总是只能达到getUser()。

我在这里做错了什么?

回答

0

我看到你正在使用的公共非内部类嵌套配置,所以你应该添加@NestedConfigurationProperty代替:

public class Scenes { 

    @NestedConfigurationProperty 
    private Sunstatus sunstatus; 

    @NestedConfigurationProperty 
    private Disable disable; 

Nested properties

您可以使用@NestedConfigurationProperty注释中的字段以表明一个普通(非内部)类应该被视为嵌套。

因此,要么添加注释(如果你打算使用其他地方的类)或使它们public static

+0

感谢您的提示,但切换后,我仍然有同样完全相同的问题。 –

+0

你有没有尝试过让公共静态类,如引用状态,添加正确的getters/setter? –

+0

是的,一定要再试一次,但仍为空。 –

0

试试这个。

@Configuration 
@ConfigurationProperties(prefix = "hue") 
public class Hue { 
    private String user; 
    private String ip; 
    private Scenes scenes = new Scenes(); 

    /* 
    * Getters and setters of course 
    */ 

    public class Scenes { 
     private Sunstatus sunstatus = new Sunstatus(); 
     private Disable disable = new Disable(); 

     /* 
     * Getters and setters 
     */ 

     public class Sunstatus { 
      private boolean enabled; 
      private String id; 
      private String group; 

      /* 
      * Getters and setters 
      */ 
     } 

     public class Disable { 
      private boolean enabled; 
      private String id; 
      private String group; 

      /* 
      * Getters and setters 
      */ 
     } 
    } 
} 
+0

场景现在得到初始化与这些变化,但它仍然返回null从例如:hue.getScenes()。getSunstatus()。getId() –

+0

这很奇怪,这对我来说是好的。 –