当前位置: 首页 > 知识库问答 >
问题:

在将yml文件加载到对象中时获取绑定属性异常

谢英光
2023-03-14

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

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

  logicalClientIdentifiers:
    -   applicationIdentifier:
            applicationId: x
            logicalClientIds:
            - x
    -   applicationIdentifier:
            applicationId: y
            logicalClientIds:
            - y
@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文件。

共有1个答案

充昌勋
2023-03-14

您的Java类看起来希望加载以下YAML:

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

您需要小心使YAML结构和您的类结构匹配。您显示的YAML忽略了类LogicalClientIdentifiers中的ApplicationIdentifiers字段,而是包含一系列映射,其中每个映射只包含一个键ApplicationIdentifier,该键不映射到Java类中的任何内容。

错误信息出现是因为您指定了无效的前缀。如文件所述,

因此必须使用@configurationproperties(prefix=“logical-client-identifiers”)

 类似资料:
  • 我有以下代码: 生日属性的类型为java.time。LocalDate,并且属于类Person。因为我使用JPA,所以我不想使用JavaFX属性。上述代码无法编译。编译器的错误消息是: 我该如何解决这个问题? 更新:我的个人类具有以下代码: 控制器类:

  • 问题内容: 我有一个JSON对象,说: 我想将其绑定到Java对象中,例如: 如何将JSON 的值设置为Java对象中的字段? 我尝试使用来注释字段,但是那样行不通。 问题答案: 这不是完美的方法,但这是我能找出的最优雅的方法。

  • 问题内容: 我有一个实体课 } 在某些情况下,我不想加载对象A,因为我已经有了该对象。对于C也是如此。但是这些是特定的场景,我根本不想加载那些对象。 有什么方法可以告诉Hibernate不要加载实体对象的某些属性。{没有渴望/获取建议。我只希望仅在特定情况下才发生这种情况] 注意:我现在使用Criteria来获取对象。 问题答案: 由于用于查询,因此可以在运行时根据条件使用“ fetch”关键字指

  • 问题内容: 这个问题很简单,但是由于我是python的新手,所以我从php过来了,因此遇到了一些错误。 我有以下简单的课程: 在PHP中,我可以执行以下操作: 我该如何在python中做到这一点? 问题答案: 要访问对象的字段或方法,请使用dot : 如果将在运行时定义字段名称,请使用内置函数:

  • 问题内容: 基本上,我有一个带有的表单,用于选择要使用的数据集(值分别为“ m”,“ f”和“ c”)。然后,我有一个字典/对象,其数据位于: 现在我需要/ / 但我不知道如何使用语法-我已经试过: 什么是正确的语法/方法? 问题答案: 由于您是通过变量引用属性,因此需要使用括号表示法。 …这与您传递字符串时使用的表示法相同。

  • 我使用Mapstruct(1.2.0.final)来映射dto对象,我希望将对象的属性提取到它自己的对象实例。 如何做到这一点?或者有没有更方便的方法来去掉只有一个属性的(无用的)对象? 提前谢了。