首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring升级到2.2.6 -无法将yaml属性绑定到对象列表

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

Stack Overflow用户
提问于 2020-05-01 23:53:25
回答 1查看 1.4K关注 0票数 1

我正在将一个项目升级到SpringBoot2.2.6。以下是wrt将yaml属性数据绑定到对象列表的编译错误-

**请注意,该项目正在编译以前版本的spring (2.2.1),我一直在使用**。

org.springframework.boot.context.properties.ConfigurationPropertiesBindException:错误创建名为“webUiApplication.state”的bean :无法将属性绑定到“WebUiApplication.States”:prefix=states、ignoreInvalidFields=false、ignoreUnknownFields=true;嵌套异常是org.springframework.boot.context.properties.bind.BindException:未能将属性绑定到java.util.List下

application.yml

代码语言:javascript
复制
   states:
  defaults:
    -
      postal-code: AL
      name: Alabama
    -
      postal-code: AK
      name: Alaska
    -
      postal-code: AZ
      name: Arizona

配置

代码语言:javascript
复制
    @Data 
   @Configuration
   @ConfigurationProperties("states")
   public static class States {

      private List<State> defaults;

      private List<State> docVerify;

      private List<State> registration;

  }

波霍

代码语言:javascript
复制
@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);
   }
}

曾遇到议员收到类似问题但未能找到解决办法的职位。期待您的投入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-05 05:05:16

重构代码:

各国:

代码语言:javascript
复制
@Data

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

    }

状态:

代码语言:javascript
复制
@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

代码语言:javascript
复制
states:
  defaults:
    -
      postal-code: AL
      name: Alabama
    -
      postal-code: AK
      name: Alaska
    -
      postal-code: AZ
      name: Arizona

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61552600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档