【问题标题】:Exception in yml binding to nested java objectyml 绑定到嵌套 java 对象中的异常
【发布时间】:2018-11-20 15:47:43
【问题描述】:

在尝试映射嵌套java对象中的yml时遇到以下异常,是否有人也面临异常,请建议:

org.springframework.beans.factory.BeanCreationException: 错误 创建名为“别名”的 bean:无法将属性绑定到别名 (前缀=别名,ignoreInvalidFields=false,ignoreUnknownFields=true, 忽略嵌套属性=假);嵌套异常是 java.lang.NullPointerException 在 org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:352) 在 org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:303) 在 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 + "]";
        }
    }

【问题讨论】:

    标签: java spring spring-boot configurationproperties


    【解决方案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 + "]";
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 2019-04-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多