在Spring Boot中将Yaml中的映射列表映射为对象列表。

57 浏览
0 Comments

在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 List channelConfigurations;
    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有什么线索表明这里出了什么问题吗?

0
0 Comments

问题的原因是:通过Yaml文件映射列表到Spring Boot中的对象列表时,没有找到明确的简洁的解决方案。

解决方法是:

1. 创建一个Tools类,该类有一个名为toolList的List属性。

2. 创建一个Tool类,该类有name和matchUrl两个String属性。

3. 在另一个类SomeOtherClass中使用Tools类的实例,并通过getToolList方法获取toolList,并对其进行操作。

这样,在日志中就可以看到name和matching url被打印出来了。

以上是通过参考其他文章和帖子得出的解决方案,希望对大家有帮助。

0
0 Comments

在Spring Boot中,将Yaml中的mapping列表映射为对象列表时可能会遇到一些问题。下面是一些出现问题的原因和解决方法。

首先,不需要构造函数和注解内部类。可以将类改为以下形式:

(prefix = "available-payment-channels-list")
public class AvailableChannelsConfiguration {
    private String xyz;
    private List channelConfigurations;
    // 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而不是列表时遇到问题,可以寻求帮助来解决。

0
0 Comments

问题的出现的原因可能是配置文件的问题,可能存在额外的空格、字符、特殊字符、缩进错误等。另外,可能还有其他配置文件被错误地使用。

解决方法可能是检查配置文件是否符合要求,并确保没有额外的空格、字符、特殊字符或缩进错误。另外,还可以检查是否有其他配置文件被错误地使用。

以下是一篇文章的整理:

问题:将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中的对象列表的问题的出现原因及解决方法的整理。

0