2017-02-09 2 views
1

Ich versuche, ein YAML als Konfigurationsdatei in meinem Spring Boot 1.5.1 Projekt einzurichten und zu verwenden.Spring boot YAML Config liest nicht alle Werte

Meine YAML-Datei sieht wie folgt aus:

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 

Es perfekt funktioniert gut hue.getUser lesen(). Hue.getScenes() gibt jedoch aus irgendeinem Grund null zurück. Mein Java-Code für das Hue Config sieht wie folgt aus:

@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 
      */ 
     } 
    } 
} 

Ich habe auch versucht, das jede Klasse mit dem Präfix mit Anmerkungen versehen und sowohl im Format von hue.scenes.sunstatus, scenes.sunstatus und gerade auch Sunstatus.

Außerdem habe ich auch versucht, die @Value Annotation ein bisschen ohne Glück zu benutzen.

Es ist das gleiche Ergebnis, wenn ich die Daten in application.yml oder in einer externen Datei aufbewahre. Kann immer nur getUser() erreichen.

Was mache ich hier falsch?

Antwort

0

Ich sehe Sie öffentliche nicht-innere Klassen für verschachtelte Konfiguration verwenden, so sollten Sie die @NestedConfigurationProperty stattdessen hinzufügen:

public class Scenes { 

    @NestedConfigurationProperty 
    private Sunstatus sunstatus; 

    @NestedConfigurationProperty 
    private Disable disable; 

Nested properties

Sie die @NestedConfigurationProperty Anmerkung auf einem Feld verwenden können um anzuzeigen, dass eine reguläre (nicht-innere) Klasse so behandelt werden sollte, als wäre sie verschachtelt.

Fügen Sie also entweder die Anmerkungen hinzu (wenn Sie die Klassen anderswo verwenden möchten) oder machen Sie sie public static.

+0

Danke für den Tipp, aber nach dem Einschalten ich habe immer noch das gleiche exakt gleiche Problem. –

+0

Haben Sie versucht, die Klassen öffentlich statisch zu machen, wie die Referenzzustände, indem Sie die richtigen Getter/Setter hinzufügen? –

+0

Yep stellte sicher, dass Sie es noch einmal versuchen, aber immer noch null. –

0

versuchen Sie dies.

@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

Szenen werden jetzt mit diesen Änderungen initialisiert, aber es gibt immer noch null aus Beispiel: hue.getScenes(). GetSunstatus(). GetId() –

+0

Das ist seltsam. Es ist in Ordnung für mich. –

Verwandte Themen