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

原因:元素未绑定

盖昀
2023-03-14

如何在JavaSpringBoot应用程序中从配置yml文件加载对象列表?

我已经尝试了几个来源:

配置-属性-在-Spring-引导

Spring Boot配置属性示例

SpringBoot 2的元素没有绑定

堆栈:Java11,SpringBoot 2.1.4,Lombok,. yml格式的配置文件。

我尝试实现简单的@Component,它将从配置文件加载数据。

配置值为:

allowed:
  - first-crossroad: ONE
    second-crossroad: TWO
    third-crossroad: TWO
    fourth-crossroad: THREE
  - first-crossroad: ONE
    second-crossroad: THREE
    third-crossroad: TWO
    fourth-crossroad: ONE

用于数据加载的Java类是:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "")
@Data
public class AllowedCrossroads {

  private List<CrossroadCombination> allowed;
}

Java交叉组合对象定义:

java prettyprint-override">@Data
@Builder
@AllArgsConstructor
public class CrossroadCombination {

  private String firstCrossroad;
  private String secondCrossroad;
  private String thirdCrossroad;
  private String fourthCrossroad;
}

我希望在应用程序运行期间加载值。但我得到了一个错误:

Property: allowed[0].first-crossroad
    Value: ONE
    Origin: class path resource [application.yml]:644:17
    Reason: The elements [allowed[0].first-crossroad,allowed[0].fourth-crossroad,allowed[0].second-crossroad,allowed[0].third-crossroad,allowed[1].first-crossroad,allowed[1].fourth-crossroad,allowed[1].second-crossroad,allowed[1].third-crossroad,allowed[2].first-crossroad,allowed[2].fourth-crossroad,allowed[2].second-crossroad,allowed[2].third-crossroad] were left unbound.

共有3个答案

鲁俊友
2023-03-14

你试过java ResourceBundle库吗?

例如:

ResourceBundle configApp = ResourceBundle.getBundle("path to your configuration file");

之后,您可以像这样使用configApp:

configApp.getString("first-crossroad");

你能试试看,告诉我进展如何吗。

编辑:

如果计划使用ResourceBundle,配置文件中的数据应如下所示:

allowed=[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]

“[]”不是必需的,但它使它看起来更可读

然后你这样称呼它:

configApp。getObject(“允许”);

这样可以存储它:

[first-crossroad= ONE, second-crossroad= TWO, third-crossroad= TWO,fourth-crossroad= THREE,first-crossroad= ONE, second-crossroad= THREE,third-crossroad= TWO, fourth-crossroad= ONE]

然后你可以将它投射到一个数组中,或者像这样玩它。

崔博延
2023-03-14

将内部类设置为静态将起作用

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "")
@Data
public class AllowedCrossroads {

    private List<CrossroadCombination> allowed;

    @Data
    public static class CrossroadCombination {
        private String firstCrossroad;
        private String secondCrossroad;
        private String thirdCrossroad;
        private String fourthCrossroad;
    }
}
后焕
2023-03-14

(众多解决方案之一):

到java类:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CrossroadCombination {

  private String firstCrossroad;
  private String secondCrossroad;
  private String thirdCrossroad;
  private String fourthCrossroad;
}

说明:

这是因为当我们创建一个对象时,我们需要一个空对象,然后用数据填充它。这就是为什么我们不需要args构造函数。

无论如何,“丹尼尔五世”的解决方案也是正确的,谢谢你!

 类似资料:
  • 我的Spring Boot应用程序有一个文件application.yml,它不愿意运行。 根据日志,元素[simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host]未绑定的原因。然而,这个属性是在application.yml设置的,编译器甚至会返回它的值。 如果有人能帮我解

  • 问题内容: 所以我一直在遵循这个请求,将Redis集成到jhipster生成器上:https : //github.com/jhipster/generator- jhipster/pull/10057/commits/cd2f2865d35dfd77624dd3a38ed32822e895539d 这是我配置的: ApplicationProperties.java: CacheConfigur

  • 问题内容: 我正在尝试找出如何阻止 DOM 元素以角度限制来自合并范围的数据。 我知道您可以使用if语句和所有方法来执行此操作,但是是否有一种真正而永久的方法来停止以角度绑定元素但保留添加的内容? 所以说我有这个 我更改了模型,以便div更改为此。 然后,我单击将其解除绑定的按钮,因此,如果将模型更改为,则不需要与以前相同。这个 我知道还有许多其他方法可以执行此操作,但是我不知道要真正地解除绑定元

  • img单击很少会失败,即使要获得单击的元素是相同的,也不会声称该元素不可单击。 我有一个对话框,包含一些按钮(关闭按钮与img X在里面)。 如您所见,元素是相同的。我开始怀疑这个元素的陈旧性,它的支持性,甚至元素移动的可能性。 下面是一个代码片段,其中包括调试消息,我将解释。 在执行单击之前: 正如您所看到的,内部HTML只是一个IMG: 因此,任何关于为什么会发生这种情况的建议都将非常感谢。

  • 问题内容: 我在“ tx:annotation-driven”行上收到上述错误,但是我在Bean文件的顶部声明了名称空间,为什么以下XML导致此错误? 问题答案: 就像其他xmlns:定义一样,您需要一个xmlns:tx

  • 问题内容: 我的logcat中出现这种错误。尽管出现此错误,但我的项目运行正常。所以我只想澄清有关此错误的这些内容: 问题答案: 我认为当您已经安装了以前的版本并从eclipse运行应用程序时会发生这种情况?如果您在从Eclipse重新运行之前卸载了该应用程序,则不会发生这种情况。另外,这不会造成任何问题。