2017-02-09 4 views
1

Я пытаюсь настроить и использовать YAML в качестве файла конфигурации в моем проекте Spring Boot 1.5.1.Spring boot YAML Config не читает все значения

Мой 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 код Hue Config выглядит следующим образом:

@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

Вы пытались сделать классы общедоступными статическими, например, состояниями ссылок, добавив правильные геттеры/сеттеры? –

+0

Да, конечно, попробуйте еще раз, но все равно null. –

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

Это странно. Это нормально для меня. –

Смежные вопросы