2015-01-26 12 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