異常:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘companyNewsService’: Unsatisfied dependency expressed through field ‘capricornSftpConfig’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘capricornSftpConfig’: Could not bind properties to CapricornSftpConfig (prefix=capricorn.sftp, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is org.springframework.beans.InvalidPropertyException: Invalid property ‘types[1]’ of bean class [com.hoau.capricorn.util.sftp.CapricornSftpConfig]: Illegal attempt to get property ‘types’ threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property ‘types[1]’ of bean class [com.hoau.capricorn.util.sftp.CapricornSftpConfig]: Cannot access indexed value of property referenced in indexed property path ‘types[1]’: returned null
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactoryAutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
… 19 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘capricornSftpConfig’: Could not bind properties to CapricornSftpConfig (prefix=capricorn.sftp, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is org.springframework.beans.InvalidPropertyException: Invalid property ‘types[1]’ of bean class [com.hoau.capricorn.util.sftp.CapricornSftpConfig]: Illegal attempt to get property ‘types’ threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property ‘types[1]’ of bean class [com.hoau.capricorn.util.sftp.CapricornSftpConfig]: Cannot access indexed value of property referenced in indexed property path ‘types[1]’: returned null
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:334)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:291)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactoryAutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
… 32 common frames omitted
Caused by: org.springframework.beans.InvalidPropertyException: Invalid property ‘types[1]’ of bean class [com.hoau.capricorn.util.sftp.CapricornSftpConfig]: Illegal attempt to get property ‘types’ threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property ‘types[1]’ of bean class [com.hoau.capricorn.util.sftp.CapricornSftpConfig]: Cannot access indexed value of property referenced in indexed property path ‘types[1]’: returned null
at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:722)
at org.springframework.beans.AbstractNestablePropertyAccessor.getNestedPropertyAccessor(AbstractNestablePropertyAccessor.java:850)
at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyAccessorForPropertyPath(AbstractNestablePropertyAccessor.java:827)
at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:270)
at org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanWrapper.setPropertyValue(RelaxedDataBinder.java:699)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:95)
at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:859)
at org.springframework.validation.DataBinder.doBind(DataBinder.java:755)
at org.springframework.boot.bind.RelaxedDataBinder.doBind(RelaxedDataBinder.java:128)
at org.springframework.validation.DataBinder.bind(DataBinder.java:740)
at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget(PropertiesConfigurationFactory.java:272)
at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget(PropertiesConfigurationFactory.java:240)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:329)
… 45 common frames omitted
Caused by: org.springframework.beans.NullValueInNestedPathException: Invalid property ‘types[1]’ of bean class [com.hoau.capricorn.util.sftp.CapricornSftpConfig]: Cannot access indexed value of property referenced in indexed property path ‘types[1]’: returned null
at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:653)
… 57 common frames omitted
如果將1⃣️代碼寫在集合空判斷之下,那麼this.types就永遠都不會被賦值,而後面的yml配置解析用到getTypes時,就會報錯了
/**
* @ConfigurationProperties整個是使用反射實例化對象,然後一點一點的填充值
* 初始化時types是一個空list,將這個空列表塞到配置類實例中之後,再逐步將yml配置文件
* 中的值解析出來,填充到list中
**/
public void setTypes(List<ItemDto> types) { //set方法只會執行一次
this.types = types; //1⃣️
if (CollectionUtils.isEmpty(types)){
return; //代碼會從這裏返回
}
for (Integer i= 0; i< types.size(); i++){
types.get(i).setCode(i.toString());
}
}
public List<ItemDto> getTypes() {
return types;
}