如何在java springboot应用程序中从配置yml文件加载对象列表?
我已经尝试了几种来源:
configuration-properties-in-spring-boot
spring-boot-configurationproperties-example
SpringBoot 2 the elements were left unbound
Stack:Java 11,SpringBoot 2.1.4,Lombok,.yml格式的配置文件。
我尝试实现简单的@Component,它将从配置文件中加载数据。
配置值为:
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类是:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "")
@Data
public class AllowedCrossroads {
private List<CrossroadCombination> allowed;
}
Java CrossroadCombination对象定义:
@Data
@Builder
@AllArgsConstructor
public class CrossroadCombination {
private String firstCrossroad;
private String secondCrossroad;
private String thirdCrossroad;
private String fourthCrossroad;
}
我希望在应用程序运行期间加载值。但是我遇到了错误:
属性:允许[0]。第一十字路口 价值:一 来源:类路径资源[application.yml]:644:17 原因:元素[allowed [0] .first-roadroad,allowed [0] .fourth-crossroad,allowed [0] .second-crossroad,allowed [0] .third-crossroad,allowed [1] .first-crossroad,允许[1]。第四十字路口,允许[1]。第二交叉,允许[1]。第三十字路口,允许[2]。第一十字路口,允许[2]。第四十字路口,允许[2]。第二个十字路口,允许的[2]。第三个十字路口)没有约束。
答案 0 :(得分:4)
将Inner类设为静态将起作用
@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;
}
}
答案 1 :(得分:1)
您尝试过使用Java ResourceBundle库吗?
例如:
<NativeSelect
value={person}
className={classes.margin}
onChange={handleChangeSelect}
input={<BootstrapInput name="person" id="person-customized-native-simple"/>}
disabled
>
<option value=""/>
<option value={10}>Peter</option>
<option value={20}>Alex</option>
<option value={30}>Jon</option>
</NativeSelect>
之后,您可以像这样使用configApp:
ResourceBundle configApp = ResourceBundle.getBundle("path to your configuration file");
您能尝试一下并告诉我如何吗?
编辑:
如果您打算使用ResourceBundle,则配置文件中的数据应如下所示:
configApp.getString("first-crossroad");
“ []”不是必需的,但使它看起来更具可读性
然后您这样称呼它:
configApp.getObject(“ allowed”);
将像这样存储它:
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]
然后您可以将其转换为数组或像这样玩。
答案 2 :(得分:1)
(众多)之一:
到Java类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CrossroadCombination {
private String firstCrossroad;
private String secondCrossroad;
private String thirdCrossroad;
private String fourthCrossroad;
}
说明:
这是因为在创建对象时,我们需要有一个空对象,然后用数据填充它。这就是为什么我们不需要args构造函数的原因。
无论如何,“ @ Daniel V”的任何解决方案都是正确的,并对此表示感谢!
答案 3 :(得分:1)
包括所有字段的Getter和Setters都解决了这个问题