Java SpringBoot2.x列表绑定问题

Java SpringBoot2.x列表绑定问题,java,spring,spring-boot,yaml,Java,Spring,Spring Boot,Yaml,升级到Spring Boot 2x后,我在绑定一些列表时遇到问题。该代码在Spring1.x中工作,现在它在启动时抛出绑定错误。这是我的申请表。yml aws: geo-mappings: - name: USA regions: - us-west-2 - us-west-1 - us-east-1 - us-east-2 - name: California regions:

升级到Spring Boot 2x后,我在绑定一些列表时遇到问题。该代码在Spring1.x中工作,现在它在启动时抛出绑定错误。这是我的申请表。yml

aws:
  geo-mappings:
    - name: USA
      regions:
        - us-west-2
        - us-west-1
        - us-east-1
        - us-east-2
    - name: California
      regions:
        - us-west-2
这是我的组件类

package com.example.demo.config.aws;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by goer on 4/18/17.
 */
@Component
@Scope("singleton")
@ConfigurationProperties(prefix="aws")
public class AWSConfigProvider {

    private List<GeoMappingEntry> geoMappings = new ArrayList<>();

    public List<GeoMappingEntry> getGeoMappings() {
        return this.geoMappings;
    }


}
package com.example.demo.config.aws;
导入org.springframework.boot.context.properties.ConfigurationProperties;
导入org.springframework.context.annotation.Scope;
导入org.springframework.stereotype.Component;
导入java.util.ArrayList;
导入java.util.List;
/**
*goer于2017年4月18日创作。
*/
@组成部分
@范围(“单例”)
@配置属性(前缀=“aws”)
公共类AWSCOnfigpProvider{
private List geoMappings=new ArrayList();
公共列表getGeoMappings(){
返回此.geoMappings;
}
}
这是嵌套对象

package com.example.demo.config.aws;

import java.util.ArrayList;
import java.util.List;


public class GeoMappingEntry {
    private String name;
    private List<String> regions = new ArrayList<>();

    public GeoMappingEntry(String name, List<String> regions) {
        this.name = name;
        this.regions = regions;
    }
}
package com.example.demo.config.aws;
导入java.util.ArrayList;
导入java.util.List;
公共类地学制图{
私有字符串名称;
私有列表区域=新的ArrayList();
公共GeoMappingEntry(字符串名称、列表区域){
this.name=名称;
这个区域=区域;
}
}
当我试着跑的时候,我得到


应用程序无法启动


说明:

无法将“aws.geo mappings”下的属性绑定到java.util.List:

Reason: Failed to bind properties under 'aws.geo-mappings' to java.util.List<com.example.demo.config.aws.GeoMappingEntry>
原因:无法将“aws.geo mappings”下的属性绑定到java.util.List
行动:

更新应用程序的配置


还有其他人遇到过同样的问题吗?解决?建议?

以防万一其他人也在关注类似的问题。事实证明,一些在以前版本的Spring中不起作用的环境变量现在能够实际创建绑定,这就是错误的来源


在本例中,从环境变量到列表(如
AWS\u GEOMAPPINGS\u 0\u REGIONS\u 0=us-west-2
)的松散绑定以前不起作用,但现在起作用了。在SpringBoot2.0之前,从环境变量设置这个的唯一方法是通过
Spring\u APPLICATION\u JSON
传递JSON,这是可行的,但如果您试图使用封装它的其他JSON(如Terraform)进行部署,则会变得复杂

我想说,您的
名称
字段需要一个setter。初始化的集合不需要setter,但未初始化的字段可能需要一个setter。可能是我希望中修复的错误。我已经用2.0.2创建了一个简化的项目,它是最新的版本,但不起作用。我怀疑新的绑定实现在某些方面有更严格的限制,并造成了问题。您能提供更多详细信息吗?这将是有益的未来读者知道,例如,哪些环境变量是你正在谈论的一个。。。只是说说而已。