2017-02-09 68 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

這很奇怪,這對我來說是好的。 –