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

Spring Boot升级至2.2.6-无法将yaml属性绑定到对象列表

哈骞仕
2023-03-14

我正在将一个项目升级到Spring Boot 2.2.6。在编译错误之后,将yaml属性数据绑定到对象列表-

**请注意,该项目是在我使用的以前版本的spring boot(2.2.1)中编译的**

JAVAlang.IllegalStateException:未能加载ApplicationContext,原因是:org。springframework。靴子上下文属性。ConfigurationPropertiesBindException:创建名为“webUiApplication”的bean时出错。状态“:无法将属性绑定到“WebUiApplication”。状态:前缀=状态,ignoreInvalidFields=false,ignoreUnknownFields=true;嵌套异常为org。springframework。靴子上下文属性。绑定BindException:无法在“”状态下绑定属性。默认值为java。util。列表

应用yml公司

   states:
  defaults:
    -
      postal-code: AL
      name: Alabama
    -
      postal-code: AK
      name: Alaska
    -
      postal-code: AZ
      name: Arizona

配置

    @Data 
   @Configuration
   @ConfigurationProperties("states")
   public static class States {

      private List<State> defaults;

      private List<State> docVerify;

      private List<State> registration;

  }

波约

@Data
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@ToString(onlyExplicitlyIncluded = true)
public class State implements ListOption {
   public static final Comparator<State> DISPLAY_COMPARATOR = new ListOption.DisplayComparator<>();

   @NonNull private final String postalCode;

   @NonNull private final String name;

@Override
   @EqualsAndHashCode.Include
   public String getValue() {
      return this.postalCode;
   }

   @Override
   @ToString.Include
   public String getLabel() {
      return String.format("%s - %s", postalCode, name);
   }
}

遇到过成员收到类似问题但无法解决的帖子。期待您的投入。

共有1个答案

邹铭
2023-03-14

重构代码:

国家:

@Data

    @Configuration
    @ConfigurationProperties("states")
    @ToString
    @NoArgsConstructor
    public class States {
        private List<State> defaults;
        private List<State> docVerify;
        private List<State> registration;

    }

国家:

@Data
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@ToString(onlyExplicitlyIncluded = true)
@NoArgsConstructor
public class State {
    @NonNull
    private String postalCode;

    @NonNull
    private String name;

    @EqualsAndHashCode.Include
    public String getValue() {
        return this.postalCode;
    }

    @ToString.Include
    public String getLabel() {
        return String.format("%s - %s", postalCode, name);
    }
}

application.yaml

states:
  defaults:
    -
      postal-code: AL
      name: Alabama
    -
      postal-code: AK
      name: Alaska
    -
      postal-code: AZ
      name: Arizona

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

 类似资料:
  • 问题内容: 通过运行以下命令,我刚刚从6 升级到Babel 7: 这是我的文件: 然后我跑了: 结果是: 我做错什么了? 问题答案: 在您的文件中,更改 至 (如果尚未安装,请安装该软件包)。 在您仍在引用程序包(适用于6.x)的情况下,您想要引用(对于7.x适用)。 https://github.com/babel/babel/issues/6186#issuecomment-366556833

  • 问题内容: 我要返回一个Mongoose文档,并希望在发送之前向其中添加一些元数据。但是,我无法添加任何属性,我不确定为什么。我检查了它是否可以使用Object.isExtensible(doc)扩展。 可能是什么问题? 问题答案: 啊..我的对象是一个Mongoose文档,不允许添加属性。解决方案是将返回的文档转换为普通对象,或者在查询中调用lean()。

  • 我知道如果我把属性放在。yml文件如下: 我可以将它们绑定到java。util。列出或设置类型。如果yaml属性如下: 我可以把它绑在地图上。我想知道是否可以将yml属性绑定到映射

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

  • 我正在尝试将yml文件映射到Spring boot应用程序中具有字符串键和PromotionPolicy值的HashMap,并使用默认的Spring boot实现来解析这些值,但当我尝试从映射中读取值时,PromotionPolicy对象只包含所有实例的默认值[0,false,false]。 我的yml是: 我拥有的模型是: 组件java类如下: 尝试在此处显示值: 我的输出如下: 而我希望结果包

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