Исключение в привязке yml к вложенному объекту Java
Если вы пытаетесь отобразить yml во вложенном java-объекте, сталкивайтесь с приведенным ниже исключением, если вы столкнулись с этим исключением, пожалуйста, предложите:
org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем 'псевдоним': не удалось привязать свойства к псевдониму (префикс = псевдоним, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); Вложенное исключение - java.lang.NullPointerException в org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:352) в org.spring.Процесс_процессПроинтинг в org.springframework.cloud.context.properties.ConfigurationPropertiesRebinder.rebind(ConfigurationPropertiesRebinder.java:100)
Caused by: java.lang.**NullPointerException**: null
Приложение-alias.yml
alias:
name:
-
x: 123
-
x: 321
Alias.java
@Configuration
@ConfigurationProperties(prefix = "alias")
public class Alias {
private List<PropA> name = null;
public Alias() {}
public List<PropA> getName() {
return name;
}
public void setName(List<PropA> name) {
this.name = name;
}
}
AliasResolverImpl.java
@Component
@EnableConfigurationProperties
public class AliasResolverImplBack implements MapperInterface {
@Autowired
Alias aliases;
@Override
public List<Entity> resolve(List<Entity> request) throws AliasException {
System.out.println("In impl : "+aliases.toString());
return null;
}
}
ApplicationConfig.java
@SpringBootApplication(scanBasePackages = "com.ie.naukri.services.mnj.lookupService")
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@EnableConfigurationProperties
public class ApplicationConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(final String[] args) {
SpringApplication.run(ApplicationConfig.class, args);
final ApplicationContext applicationContext = SpringApplication.run(ApplicationConfig.class, args);
applicationContext.getBean(AliasResolverImpl.class).resolve(null);
}
}
PropA.java
@Configuration
@ConfigurationProperties(prefix="alias.name")
public class PropA {
private int x=0;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
@Override
public String toString() {
return "PropA [x=" + x + "]";
}
}
1 ответ
Это должно работать
@Configuration
@ConfigurationProperties(prefix = "alias")
public class Alias {
private List<PropA> name = null;
public Alias() {}
public List<PropA> getName() {
return name;
}
public void setName(List<PropA> name) {
this.name = name;
}
}
И удалите эти строки из класса PropA
@Configuration
@ConfigurationProperties(prefix="alias.name")
Ваш класс PropA должен быть просто
public class PropA {
private int x=0;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
@Override
public String toString() {
return "PropA [x=" + x + "]";
}
}