在Spring Boot中将Yaml中的映射列表映射为对象列表。
在Spring Boot中将Yaml中的映射列表映射为对象列表。
在我的Spring Boot应用程序中,我有一个包含以下内容的application.yaml配置文件。我希望将其作为一个带有通道配置列表的Configuration对象注入:\navailable-payment-channels-list:\n xyz: \"123\"\n channelConfigurations:\n -\n name: \"Company X\"\n companyBankAccount: \"1000200030004000\"\n -\n name: \"Company Y\"\n companyBankAccount: \"1000200030004000\"\n
\n我希望@Configuration对象中填充PaymentConfiguration对象的列表:\n
@ConfigurationProperties(prefix = "available-payment-channels-list") @Configuration @RefreshScope public class AvailableChannelsConfiguration { private String xyz; private ListchannelConfigurations; public AvailableChannelsConfiguration(String xyz, List channelConfigurations) { this.xyz = xyz; this.channelConfigurations = channelConfigurations; } public AvailableChannelsConfiguration() { } // getters, setters @ConfigurationProperties(prefix = "available-payment-channels-list.channelConfigurations") @Configuration public static class ChannelConfiguration { private String name; private String companyBankAccount; public ChannelConfiguration(String name, String companyBankAccount) { this.name = name; this.companyBankAccount = companyBankAccount; } public ChannelConfiguration() { } // getters, setters } }
\n我将其作为一个普通的bean通过@Autowired构造函数注入。xyz的值被正确填充,但是当Spring尝试将yaml解析为对象列表时,我得到以下错误:\n
nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [io.example.AvailableChannelsConfiguration$ChannelConfiguration] for property 'channelConfigurations[0]': no matching editors or conversion strategy found]
\n有什么线索表明这里出了什么问题吗?
在Spring Boot中,将Yaml中的mapping列表映射为对象列表时可能会遇到一些问题。下面是一些出现问题的原因和解决方法。
首先,不需要构造函数和注解内部类。可以将类改为以下形式:
(prefix = "available-payment-channels-list") public class AvailableChannelsConfiguration { private String xyz; private ListchannelConfigurations; // getters, setters public static class ChannelConfiguration { private String name; private String companyBankAccount; // getters, setters } }
此外,当使用`RefreshScope`和``时,可能会遇到一些问题。可以参考这个github issue。
如果出现类似于“Cannot convert value of type [java.lang.String] to required type [io.example.available_channels.AvailableChannelsConfiguration$ChannelConfiguration]”的错误,可以尝试将`ChannelConfiguration`导出为自己的类,并使用`@Component`注解进行标记。同时,需要为所有字段添加setter和getter方法。
如果以上方法仍然无法解决问题,可以尝试使用最新版本的Spring Boot进行测试,或者创建一个空项目进行测试,以确认问题与其他因素无关。
如果在使用Map而不是列表时遇到问题,可以寻求帮助来解决。
问题的出现的原因可能是配置文件的问题,可能存在额外的空格、字符、特殊字符、缩进错误等。另外,可能还有其他配置文件被错误地使用。
解决方法可能是检查配置文件是否符合要求,并确保没有额外的空格、字符、特殊字符或缩进错误。另外,还可以检查是否有其他配置文件被错误地使用。
以下是一篇文章的整理:
问题:将YAML列表映射到Spring Boot中的对象列表的问题
在使用Spring Boot 1.2.2的情况下,没有任何配置,问题的原因可能在其他地方。查看这个存储库-你能让它崩溃吗?[链接](https://github.com/konrad-garus/so-yaml)
您确定YAML文件的内容与您复制粘贴的内容完全一样吗?没有额外的空格、字符、特殊字符、缩进错误或其他类似的情况吗?是否可能有其他文件在搜索路径中,而不是您所期望的文件?
我也做了同样的尝试,并且在干净的Spring Boot项目中它可以正常工作。后来发现,我们为不同环境的属性加载进行的自定义处理没有正常工作。
嗨,Garus,请查看[这个链接](https://stackoverflow.com/questions/57409781)。这是一个类似的问题。
以上是关于将YAML列表映射到Spring Boot中的对象列表的问题的出现原因及解决方法的整理。