Spring:如何从属性文件中设置@DateTimeFormat模式?

时间:2014-12-18 00:07:15

标签: java spring spring-mvc

我提出同样的问题here,因为其中提供的答案无法解决我的问题。

我在Spring MVC Web应用程序中使用Spring 4.1.3。我有一个包含字段的JPA实体bean:

@DateTimeFormat(pattern = "${date.format}")
private LocalDate certifiedOn;

我希望根据属性文件中的键注入模式。 This should work in Spring since 3.0.3,但是绑定在控制器中失败,因为Pattern includes reserved character '{'

我知道我正在成功阅读我的属性文件,因为其他属性正在应用程序中使用。以下是我通过javaConfig进行设置的方法:

@Configuration
@ComponentScan(basePackages = "com")
@PropertySource("classpath:spring.properties")
public class AppConfig {

  @Bean
  public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
  }
  ...
}

在类路径的根处有spring.properties文件:

date.format = yyyy-MM-dd

我在这里错过了什么会阻止它工作?

1 个答案:

答案 0 :(得分:0)

我尝试重现这个问题,你所做的一切看起来都是正确的 - 这就是我所拥有的:

<强> application.properties

date.format=yyyy-MM-dd

Spring-managed class

public class MyClass {
private static final Logger log = LoggerFactory.getLogger(MyClass.class);

@DateTimeFormat(pattern = "${yyyy-MM-dd}")
private LocalDate certifiedOn = LocalDate.now();

@Override
public void afterPropertiesSet() throws Exception {
    log.info("Date format used: " + certifiedOn);
}
}

<强>输出

  

使用的日期格式:2015-01-22

<强>通知

我将字段设置为LocalDate.now(),并以正确的格式显示日期。

如果我没有设置certifiedOn字段的值,则打印出来:

  

使用的日期格式:null

可能的原因

如果null值是您在certifiedOn中看到的值,可能是从属性文件中正确获取date.format,但尚未初始化为非空价值。

否则,您在这里描述的所有内容都应该像宣传的那样工作。也许还有另一个影响你正在经历的事情的因素超出了你的目标?