2016-01-13 34 views
0

我想從我的application.yml配置文件注入一個映射列表到我的Spring Boot服務。這裏是application.yml配置:從application.yml注入地圖列表到服務

devoxx: 
    cfpApis: 
    - 
     url: http://cfp.devoxx.be/api/conferences 
     youtubeChannelId: UCCBVCTuk6uJrN3iFV_3vurg 
    - 
     url: http://cfp.devoxx.fr/api/conferences 
    - 
     url: http://cfp.devoxx.ma/api/conferences 
     youtubeChannelId: UC6vfGtsJr5RoBQBcHg24XQw 
    - 
     url: http://cfp.devoxx.co.uk/api/conferences 
    - 
     url: http://cfp.devoxx.pl/api/conferences 

這裏是我在我的服務屬性:

@Value("devoxx.cfpApis") 
List<Map<String,String>> cfpApis 

但是,必須有一些錯誤,因爲當我嘗試運行我的申請,我得到的以下例外:

java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Map]: no matching editors or conversion strategy found 

任何想法我做錯了什麼?我試圖將一個Grails 3項目遷移到一個vanilla Spring Boot項目中,這個配置在Grails 3中工作,但Grails有它自己的YAML處理器。

+1

到目前爲止,我還沒有使用'yaml'文件,但是您通常使用'@'''像'@Value(「$ {devoxx.cfpApis}」)''引用一個屬性佔位符。儘管如此,[spring documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-loading- yaml)似乎表明使用'@ ConfigurationProperties'有一些不同的方法。也許[這個其他問題](http://stackoverflow.com/questions/24917194/spring-boot-inject-map-from-application-yml)可以有一定的幫助 – Morfic

+0

這很好。謝謝。我會添加一個答案詳述這個 – Sebastien

+0

乾杯,很高興我可以幫助:) – Morfic

回答

3

感謝@ Morfic的評論,這裏是我最終如何解決這個問題。

我用@ConfigurationProperties(prefix="devoxx")註解標記了我的服務類。在我的服務中,我現在有一個名爲cfpApis的屬性,其中包含以下聲明:

List<Map<String,String>> cfpApis 

而且這個工作很好。