【问题标题】:Spring boot YAML Config not reading all valuesSpring boot YAML Config未读取所有值
【发布时间】:2017-06-28 00:12:12
【问题描述】:

我正在尝试在我的 Spring Boot 1.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

阅读 hue.getUser() 非常好。但是,由于某种原因,hue.getScenes() 返回 null。我的 Hue Config 的 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()。

我在这里做错了什么?

【问题讨论】:

    标签: java spring spring-boot configuration yaml


    【解决方案1】:

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

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

    Nested properties

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

    所以要么添加注释(如果您打算在其他地方使用这些类)或将它们设为public static

    【讨论】:

    • 感谢您的提示,但切换到该提示后,我仍然遇到完全相同的问题。
    • 您是否尝试过将类设为公共静态,例如引用状态,添加正确的 getter/setter?
    • 是的,确保再试一次,但仍然为空。
    【解决方案2】:

    试试这个。

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

    【讨论】:

    • 场景现在通过这些更改初始化,但它仍然从示例返回 null:hue.getScenes().getSunstatus().getId()
    • 这很奇怪。对我来说没问题。
    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 2023-03-21
    • 2020-05-31
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多