我提出同样的问题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
我在这里错过了什么会阻止它工作?
答案 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
,但尚未初始化为非空价值。
否则,您在这里描述的所有内容都应该像宣传的那样工作。也许还有另一个影响你正在经历的事情的因素超出了你的目标?