application.properties:
my.list=1,2,3,4
我想将此List
注入@Value
字段:
@Value("${my.list}")
List<Integer> list;
在网上我发现必须注册以下bean才能工作:
@Bean
public ConversionService conversionService() {
return new DefaultConversionService();
}
结果:
org.springframework.beans.TypeMismatchException: Failed to convert value of type [java.lang.String] to required type [java.util.List];
Caused by: java.lang.NumberFormatException: For input string: "1,2,3,4"
不知怎的spring
并未尝试将其解析为列表。为什么呢?
我知道可以将spEL与@Value("#{'${my.list}'.split(',')}")
一起使用,但我明确地寻找没有拼写对话的解决方案。
答案 0 :(得分:-1)
Spring正在寻找像setList(String)这样的setter,因为没有,尝试转换该值。您可以通过创建一个setList(String [] arg)方法来解决这个问题,该方法会解析arg的每个元素,然后设置列表
setList(String[] arg){
if (arg == null){
this.list = new ArrayList<>();
} else {
this.list = new ArrayList<>(arg.length);
for (String s : arg){
this.list.add(Integer.parse(s));
}
}
}
我认为Spring可以访问这样的setter,即使它是私有的,但首先尝试使用public,然后在可行的情况下降低可见性