Java 原因:元素未绑定
如何在JavaSpringBoot应用程序中从配置yml文件加载对象列表 我已经尝试了几个来源: 堆栈:Java11,SpringBoot2.1.4,Lombok,配置文件为.yml格式 我尝试实现简单的@Component,它将从配置文件加载数据 配置值为:Java 原因:元素未绑定,java,spring-boot,configuration,Java,Spring Boot,Configuration,如何在JavaSpringBoot应用程序中从配置yml文件加载对象列表 我已经尝试了几个来源: 堆栈:Java11,SpringBoot2.1.4,Lombok,配置文件为.yml格式 我尝试实现简单的@Component,它将从配置文件加载数据 配置值为: allowed: - first-crossroad: ONE second-crossroad: TWO third-crossroad: TWO fourth-crossroad: THREE -
allowed:
- first-crossroad: ONE
second-crossroad: TWO
third-crossroad: TWO
fourth-crossroad: THREE
- first-crossroad: ONE
second-crossroad: THREE
third-crossroad: TWO
fourth-crossroad: ONE
用于数据加载的Java类是:
@配置
@EnableConfigurationProperties
@ConfigurationProperties(前缀=“”)
@资料
公共类允许的十字路口{
允许私人名单;
}
Java CrossroadCombination对象定义:
@数据
@建筑商
@AllArgsConstructor
公共级交叉路口组合{
私人十字路口;
私人十字路口;
私人第三横道;;
私人串第四十字路口;
}
我希望在应用程序运行期间加载值。但我得到了一个错误:
Property: allowed[0].first-crossroad
Value: ONE
Origin: class path resource [application.yml]:644:17
Reason: The elements [allowed[0].first-crossroad,allowed[0].fourth-crossroad,allowed[0].second-crossroad,allowed[0].third-crossroad,allowed[1].first-crossroad,allowed[1].fourth-crossroad,allowed[1].second-crossroad,allowed[1].third-crossroad,allowed[2].first-crossroad,allowed[2].fourth-crossroad,allowed[2].second-crossroad,allowed[2].third-crossroad] were left unbound.
您是否尝试使用java ResourceBundle库 例如:
ResourceBundle configApp = ResourceBundle.getBundle("path to your configuration file");
之后,您可以像这样使用configApp:
configApp.getString("first-crossroad");
你能试试看,告诉我进展如何吗
编辑:
如果计划使用ResourceBundle,配置文件中的数据应如下所示:
allowed=[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
“[]”不是必需的,但它使它看起来更可读
然后你这样称呼它:
allowed=[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
configApp.getObject(“允许”)
这样可以存储它:
allowed=[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
然后,您可以将其强制转换为数组或像这样使用它。您尝试过使用java ResourceBundle库吗 例如:
ResourceBundle configApp = ResourceBundle.getBundle("path to your configuration file");
之后,您可以像这样使用configApp:
configApp.getString("first-crossroad");
你能试试看,告诉我进展如何吗
编辑:
如果计划使用ResourceBundle,配置文件中的数据应如下所示:
allowed=[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
“[]”不是必需的,但它使它看起来更可读
然后你这样称呼它:
allowed=[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
configApp.getObject(“允许”)
这样可以存储它:
allowed=[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]
然后,您可以将其投射到阵列中,或像这样使用它。(众多解决方案之一):
- 添加:@noargsconstuctor
@数据
@建筑商
@AllArgsConstructor
@诺尔格构装师
公共级交叉路口组合{
私人十字路口;
私人十字路口;
私人第三横道;;
私人串第四十字路口;
}
说明:
这是因为当我们创建一个对象时,我们需要一个空对象,然后用数据填充它。这就是为什么我们不需要args构造函数
不管怎样,“@Daniel V”的解决方案也是正确的,谢谢 (众多解决方案之一):
- 添加:@noargsconstuctor
@数据
@建筑商
@AllArgsConstructor
@诺尔格构装师
公共级交叉路口组合{
私人十字路口;
私人十字路口;
私人第三横道;;
私人串第四十字路口;
}
说明:
这是因为当我们创建一个对象时,我们需要一个空对象,然后用数据填充它。这就是为什么我们不需要args构造函数
不管怎样,“@Daniel V”的解决方案也是正确的,谢谢 将内部类设置为静态将起作用
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "")
@Data
public class AllowedCrossroads {
private List<CrossroadCombination> allowed;
@Data
public static class CrossroadCombination {
private String firstCrossroad;
private String secondCrossroad;
private String thirdCrossroad;
private String fourthCrossroad;
}
}
@配置
@EnableConfigurationProperties
@ConfigurationProperties(前缀=“”)
@资料
公共类允许的十字路口{
允许私人名单;
@资料
公共静态类交叉组合{
私人十字路口;
私人十字路口;
私人第三横道;;
私人串第四十字路口;
}
}
将内部类设置为静态将起作用
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "")
@Data
public class AllowedCrossroads {
private List<CrossroadCombination> allowed;
@Data
public static class CrossroadCombination {
private String firstCrossroad;
private String secondCrossroad;
private String thirdCrossroad;
private String fourthCrossroad;
}
}
@配置
@EnableConfigurationProperties
@ConfigurationProperties(前缀=“”)
@资料
公共类允许的十字路口{
允许私人名单;
@资料
公共静态类交叉组合{
私人十字路口;
私人十字路口;
私人第三横道;;
私人串第四十字路口;
}
}
包括所有字段的getter和setter解决了问题包括所有字段的getter和setter解决了问题我如何使用它来填充列表?因为我有两个first crossroad属性,这个属性将调用什么值:configApp.getString(“first crossroad”);返回?嘿,伙计,这是一个问题,但我做了一些测试,如果你想使用resourcebundle库,你必须把你的数据放在配置文件中,就像编辑一样,我会在我的回答中发布你谢谢,这看起来是一个解决方案!但我刚刚发现,这个问题在龙目岛。当我将@noargsconstuctor添加到class:crossroadcomposition时,它会按预期工作。这可能是因为对象首先被初始化,然后被数据填充。这就是为什么我们需要这个构造函数。无论如何,谢谢你!可以我很高兴你们找到了解决办法:我怎样才能用它来填清单呢?因为我有两个first crossroad属性,这个属性将调用什么值:configApp.getString(“first crossroad”);返回?嘿,伙计,这是一个问题,但我做了一些测试,如果你想使用resourcebundle库,你必须把你的数据放在配置文件中,就像编辑一样,我会在我的回答中发布你谢谢,这看起来是一个解决方案!但我刚刚发现,这个问题在龙目岛。当我将@noargsconstuctor添加到class:crossroadcomposition时,它会按预期工作。这可能是因为对象首先被初始化,然后被数据填充。这就是为什么我们需要这个构造函数。无论如何,谢谢你!可以我很高兴你找到了解决办法:染料,这是我的解决办法。太好了~是的,这是我的解决方案。伟大的~