【问题标题】:Spring boot date handling in application.yaml and propertiesapplication.yaml 和属性中的 Spring 启动日期处理
【发布时间】:2015-03-25 07:37:56
【问题描述】:

我正在创建一个简单的 Spring Boot 应用程序,它从 application.yaml 文件中加载一个字符串(ISO 日期)并尝试将其放入 @Value 注释字段中。 如果我使用 .yaml 文件,则字符串显然会转换为日期/日历,然后将“toStringed”转换为不同的格式。 如果我使用 .properties 文件,则字符串按原样传递。

应用

@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);
     }
}

应用程序.yaml

dateString: 2015-01-09

=> 输出:2015 年 1 月 9 日星期五 01:00:00 CET

application.properties

dateString=2015-01-09

=> 输出:2015-01-09

对我来说使用属性解决方案很好,但我不明白为什么会发生这种情况?

(注意:当尝试将 yaml-date 分配给日期字段时,预期的“无法将类型 [java.lang.String] 的值转换为所需类型 [java.util.Date]:没有匹配的编辑器或转换策略发现”抛出异常)

【问题讨论】:

    标签: date configuration yaml spring-boot


    【解决方案1】:

    这是因为 Spring Boot 使用 SnakeYAML 进行 YAML 解析,而 SnakeYAML 的默认行为是从它认为是时间戳的任何字符串创建java.util.Date。如果您有兴趣了解更多信息,请参阅 SnakeYAML 的 Resolver class 了解更多详细信息,包括它用于识别时间戳的正则表达式。

    【讨论】:

    • 谢谢,实际上这就是问题所在。我仍然认为这是非常出乎意料的行为,尤其是。因为之后日期被转换回字符串。
    • 这种行为也让我感到惊讶。我已经打开了github.com/spring-projects/spring-boot/issues/2422
    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多