2015-01-26 9 views
3

我正在創建一個簡單的spring引導應用程序,它從application.yaml文件加載字符串(ISO-date)並嘗試將其放入@Value註釋字段。 如果我使用.yaml文件,字符串顯然會轉換爲日期/日曆,然後「toStringed」轉換爲其他格式。 如果我使用.properties文件,則字符串按原樣傳遞。應配置的application.yaml和屬性中的Spring引導日期處理

應用

@EnableAutoConfiguration 
@Configuration 
@ComponentScan 
public class Application { 

    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(Application.class, args); 
     SampleComponent c = ctx.getBean(SampleComponent.class); 
     c.bla(); 
    } 
} 

元器件

@Component 
public class SampleComponent { 

    @Value("${dateString}") 
    private String dateString; 

    public void bla() { 
     System.out.println(dateString); 
    } 
} 

application.yaml

dateString: 2015-01-09 

=>輸出:星期五09年1月01:00:00 CET 2015

個application.properties

dateString=2015-01-09 

=>輸出:2015年1月9日

對我來說是好的使用性能的解決方案,但我不明白,爲什麼出現這種情況? (注意:當試圖將yaml-date分配給日期字段時,期望的「不能將[java.lang.String]類型的值轉換爲所需的類型[java.util.Date]:不匹配編輯器或轉換戰略發現「異常拋出)

回答

2

這是因爲Spring Boot使用SnakeYAML進行YAML解析,而SnakeYAML的默認行爲是從任何它認爲是時間戳的字符串中創建java.util.Date。如果您有興趣瞭解更多信息,請參閱SnakeYAML的Resolver class瞭解更多詳細信息,包括用於識別時間戳的正則表達式。

+0

謝謝,其實就是這個問題。儘管如此,我仍然稱之爲非常意外的行爲,尤其是。因爲日期之後會轉換回字符串。 – GandalfIX 2015-01-27 21:47:56

+0

這種行爲也讓我感到驚訝。我已經打開https://github.com/spring-projects/spring-boot/issues/2422 – 2015-01-27 22:21:20