如何通过@Value注入列表?

时间:2016-06-02 14:53:06

标签: java spring

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(',')}")一起使用,但我明确地寻找没有拼写对话的解决方案。

1 个答案:

答案 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,然后在可行的情况下降低可见性