Исключение в привязке yml к вложенному объекту Java

Столкнувшись с приведенным ниже исключением при попытке сопоставить yml во вложенном объекте java, любой из них также сталкивается с исключением, пожалуйста, предложите:

org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем «псевдоним»: не удалось связать свойства с псевдонимом (prefix=alias, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); вложенным исключением является java.lang.NullPointerException в org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:352) в org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcess3JavaBefore3PropertiesB в org.springframework.cloud.context.properties.ConfigurationPropertiesRebinder.rebind(ConfigurationPropertiesRebinder.java:100)

Caused by: java.lang.**NullPointerException**: null

приложение-псевдоним.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 + "]";
        }
    }

person ʞɹᴉʞ ǝʌɐp    schedule 11.06.2018    source источник


Ответы (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 + "]";
  }
}
person pvpkiran    schedule 11.06.2018