【问题标题】:Getting a binding property exception when loading the yml file into an object将 yml 文件加载到对象中时获取绑定属性异常
【发布时间】:2021-05-09 00:38:18
【问题描述】:

我正在尝试将具有以下元素的 yml 文件加载到测试类中的对象中

yml 文件名为 application-acl-config.yml,文件夹中还有更多的 yml 文件。我假设 Spring Boot 在应用程序启动时将它们全部合并为一个。

主文件夹资源中的yml文件:

  logicalClientIdentifiers:
    -   applicationIdentifier:
            applicationId: x
            logicalClientIds:
            - x
    -   applicationIdentifier:
            applicationId: y
            logicalClientIds:
            - y

pojo 类的主文件夹中的代码:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "logicalClientIdentifiers")
public class LogicalClientIdentifiers{
        private class ApplicationIdentifier {
            private String applicationId;
            private List<String> logicalClientIds;

            public String getApplicationId() {
                return applicationId;
            }

            public void setApplicationId(String applicationId) {
                this.applicationId = applicationId;
            }

            public List<String> getLogicalClientIds() {
                return logicalClientIds;
            }

            public void setLogicalClientIds(List<String> logicalClientIds) {
                this.logicalClientIds = logicalClientIds;
            }
        }

        private List<ApplicationIdentifier> applicationIdentifiers;

        public List<ApplicationIdentifier> getApplicationIdentifiers() {
            return applicationIdentifiers;
        }

        public void setApplicationIdentifiers(List<ApplicationIdentifier> applicationIdentifiers) {
            this.applicationIdentifiers = applicationIdentifiers;
        }

    }

测试文件夹中的测试代码:

@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = LogicalClientIdentifiers.class, initializers = ConfigFileApplicationContextInitializer.class)
public class ChannelAuthorizationTest {

    @Autowired
    LogicalClientIdentifiers applicationAclConfigProps;


    @Test
    public void test(){
        System.out.println();
    }

}

我遇到了这个异常:

`Caused by: org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'logicalClientIdentifiers': Could not bind properties to 'LogicalClientIdentifiers' : prefix=logicalClientIdentifiers, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.source.InvalidConfigurationPropertyNameException: Configuration property name 'logicalClientIdentifiers' is not` valid

我认为我没有正确创建 pojo 来解析 yml 文件,或者没有正确引用 yml 文件。

【问题讨论】:

    标签: java spring-boot junit yaml


    【解决方案1】:

    你的 Java 类看起来你想加载这个 YAML:

    logicalClientIdentifiers:
      applicationIdentifiers:
      - applicationId: x
        logicalClientIds:
        - x
      - applicationId: y
        logicalClientIds:
        - y
    

    您需要注意 YAML 结构和您的类结构匹配。您显示的 YAML 缺少 LogicalClientIdentifiers 类中的 applicationIdentifiers 字段,而是包含一系列映射,其中每个映射仅包含一个键 applicationIdentifier,它不会映射到您的 Java 类中的任何内容。

    您的错误消息出现是因为您指定了无效的前缀。作为described in the docs

    注解的前缀值必须是kebab大小写(小写并用-分隔,如acme.my-project.person)。

    所以你必须使用@ConfigurationProperties(prefix = "logical-client-identifiers")

    【讨论】:

    • @Fernando:由于您的 YAML 在前缀指示的路径中直接包含一个序列,因此您需要一些 List&lt;ApplicationIdentifierWrapper&gt; ,其中该包装器包含字段 ApplicationIdentifier applicationIdentifier 但我不太了解Spring Boot 告诉您如何在 List&lt;&gt; 实例上应用 @ConfigurationProperties
    猜你喜欢
    • 2018-11-20
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2018-11-16
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多