我尝试在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()。
我在这里做错了什么?
答案 0 :(得分:0)
我发现您使用公共非内部类进行嵌套配置,因此您应该添加@NestedConfigurationProperty
代替:
public class Scenes {
@NestedConfigurationProperty
private Sunstatus sunstatus;
@NestedConfigurationProperty
private Disable disable;
您可以在字段上使用@NestedConfigurationProperty注释来指示应将常规(非内部)类视为嵌套。
因此,要么添加注释(如果您打算在其他地方使用这些类),请将它们设为public static
。
答案 1 :(得分: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
*/
}
}
}