Java Spring boot YAML配置未读取所有值

Java Spring boot YAML配置未读取所有值,java,spring,spring-boot,configuration,yaml,Java,Spring,Spring Boot,Configuration,Yaml,我试图在SpringBoot1.5.1项目中设置并使用YAML作为配置文件 我的YAML文件如下所示: hue: user: cdKjsOQIRY8hqweAasdmx-WMsn ip: "http://192.168.1.69" scenes: sunstatus: enabled: true id: 93yv8JekmAneCU9 group: 1 disable:

我试图在SpringBoot1.5.1项目中设置并使用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
@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.getUser()效果非常好。但是,由于某些原因,hue.getScenes()返回null。我的色调配置的Java代码如下所示:

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
@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和just sunstatus的格式

此外,我还尝试使用@Value注释,但没有任何运气

如果我将数据保存在application.yml或外部文件中,结果是相同的。始终只能访问getUser()


我在这里做错了什么?

我看到您正在使用公共非内部类进行嵌套配置,因此您应该添加
@NestedConfigurationProperty

public class Scenes {

    @NestedConfigurationProperty
    private Sunstatus sunstatus;

    @NestedConfigurationProperty
    private Disable disable;

您可以在字段上使用@NestedConfigurationProperty注释来指示应将常规(非内部)类视为嵌套类


因此,要么添加注释(如果您计划在其他地方使用这些类),要么将它们设置为
public static

我发现您正在使用公共非内部类进行嵌套配置,因此您应该添加
@NestedConfigurationProperty

public class Scenes {

    @NestedConfigurationProperty
    private Sunstatus sunstatus;

    @NestedConfigurationProperty
    private Disable disable;

您可以在字段上使用@NestedConfigurationProperty注释来指示应将常规(非内部)类视为嵌套类

因此,要么添加注释(如果您计划在其他地方使用这些类),要么让它们成为公共静态的

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

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

谢谢你的提示,但是在切换到这个之后,我仍然有同样的问题。你是否尝试过将类公开为静态的,比如引用状态,添加正确的getter/setter?是的,请确保再试一次,但仍然为空。谢谢你的提示,但在切换到该选项之后,我仍然有同样的问题。您是否尝试过将类公开为静态的,如引用状态,添加正确的getter/setter?是的,请确保再次尝试,但仍然为null。现在使用这些更改初始化场景,但仍然从示例:hue.getScenes()返回null.getSunstatus().getId()这很奇怪。这对我来说没问题。场景现在用这些更改进行初始化,但它仍然从示例中返回null:hue.getScenes().getSunstatus().getId()这很奇怪。这对我来说没问题。