【发布时间】:2020-03-11 11:24:00
【问题描述】:
如何将以下application.properties 注入Map 字段?
my.server.url=localhost
my.server.port=8080
my.server.timeout=10000
下面的类有什么问题?
@Service
@ConfigurationProperties("my")
public class MyService {
private Map<String, String> server;
public void setServer(Map<String, String> server) { this.server = server; }
public MyService(WebClient.Builder builder) {
this.builder = builder.uri(server.get("url")).build();
}
}
结果:
通过构造函数的 Bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化[MyService]:构造函数抛出异常;嵌套异常 是java.lang.NullPointerException
【问题讨论】:
-
希望这会有所帮助。 stackoverflow.com/a/39906684/5201238
-
不,仍然遇到同样的异常。
-
不确定这是否可行。查看 Spring 代码,例如
org.springframework.boot.autoconfigure.kafka.KafkaProperties使用构建器方法将注入的列表中的单个字符串字段转换为Maps。 -
糟糕的是,问题在于构造函数内部的属性还没有被注入,因此是 NPE。
-
@membersound,您对
Map的属性注入应该可以工作。您发布的异常与您的代码无关,因为您在构造函数中获得了NPE,而在您的代码中NPE在此构造函数中是不可能的。