是否可以使用具有Spring Boot配置属性的YAML序列



我需要一个Spring Boot应用程序来加载一些最适合小型电子表格的配置。几乎所有的配置都由绑定到@ConfigurationPropertiesPOJO的YAML属性文件组成,因此:

static class Entry {
private final Terrain terrain;    // A simple enumeration
private final int value;
// ... other fields
public Entry(Terrain terrain, int value, ...) { ... }
}
@ConfigurationProperties("section")
@ConstructorBinding
@Validated
class SectionProperties {
private final List<Entry> entries;
public SectionProperties(List<Entry> entries) {
this.entries=  List.copyOf(entries);
}
// ... other fields, getters, etc
}

如果YAML的结构是这样的一系列对象,这就很好了:

section:
entries:
- terrain: plains
value: 1
- terrain: forest
value: 2

然而,从该配置的用户/作者的角度来看,如果数据被组织为"电子表格",那将是非常好的,因为他们将能够在彼此的上下文中看到各种值,而不是上面的大列表(大约有十几个条目(。类似这样的东西:

section:
entries:
- [plains, 1]
- [forest, 2]

这是有效的YAML(据我所知(,但配置绑定失败了,列表中的每个条目都出现了"未绑定属性"错误,即它似乎将entries识别为YAML序列,但无法将YAML序列块(方括号(中的数据绑定到Entry

有人试图这样做或做类似的事情吗?有可能吗?

很抱歉,如果其他地方已经解决了这个问题,我已经搜索了SO和Spring文档,但找不到任何涵盖这个特定案例的内容,也找不到它是否真的可行。

如果您自己实现映射,这应该是可能的:

@Component
@ConfigurationPropertiesBinding
public class EntryConverter implements Converter<List<String>, Entry> {
@Autowired
private ConversionService conversionService;
@Override
public Entry convert(List<String> from) {
String[] data = from.split(",");
return new Entry(data[0],
conversionService.convert(data[1], Integer.class), ...);
}
}

我不确定这是否适用于嵌套在列表中的非标量值,也不确定它是否适用于List<Entry>。尝试一下并报告:(。

相关内容

  • 没有找到相关文章

最新更新