Java SpringBoot2.x列表绑定问题
升级到Spring Boot 2x后,我在绑定一些列表时遇到问题。该代码在Spring1.x中工作,现在它在启动时抛出绑定错误。这是我的申请表。ymlJava 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:
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创建了一个简化的项目,它是最新的版本,但不起作用。我怀疑新的绑定实现在某些方面有更严格的限制,并造成了问题。您能提供更多详细信息吗?这将是有益的未来读者知道,例如,哪些环境变量是你正在谈论的一个。。。只是说说而已。