Jos*_*osh 3 java spring autowired spring-boot
在spring项目中,我想LocalDate从@Autowired构造函数参数创建一个值,该参数的值在.properties文件中。我想做两件事:
my.date,则应通过解析属性值来创建参数设置属性后,以及使用以下命令时:
@DateTimeFormat(pattern = "yyyy-MM-dd") @Value("${my.date}") LocalDate myDate,
...
Run Code Online (Sandbox Code Playgroud)
我收到此错误:java.lang.IllegalStateException:无法将类型“ java.lang.String”的值转换为所需类型“ java.time.LocalDate”:找不到匹配的编辑器或转换策略
我还使用iso = ...来使用具有相同结果的ISO日期。
LocalDate.now()我尝试使用默认值,例如:
@Value("${my.date:#{T(java.time.LocalDate).now()}}") LocalDate myDate,
...
Run Code Online (Sandbox Code Playgroud)
但是我得到了同样的错误。
原谅我对Spring的无知,但是如何在这里实现两个目标?
GKi*_*lin 14
Spring Boot 2.5,完美运行:
application.yaml
my.date: 2021-08-14
my.time: "11:00"
Run Code Online (Sandbox Code Playgroud)
@Service
public class TestService {
@Value("${my.date}")
@DateTimeFormat(pattern = "yyyy-MM-dd")
LocalDate myDate;
@Value("${my.time}")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
LocalTime myTime;
}
Run Code Online (Sandbox Code Playgroud)
我知道两种方式。一个通用于任何对象-在自定义设置器上使用@Value批注
@Component
public class Example {
private LocalDate localDate;
@Value("${property.name}")
private void setLocalDate(String localDateStr) {
if (localDateStr != null && !localDateStr.isEmpty()) {
localDate = LocalDate.parse(localDateStr);
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二个用于LocalDate / LocalDateTime
public class Example {
@Value("#{T(java.time.LocalDate).parse('${property.name}')}")
private LocalDate localDate;
}
Run Code Online (Sandbox Code Playgroud)
样本属性:
property.name=2018-06-20
Run Code Online (Sandbox Code Playgroud)
尝试将其添加到您的属性文件中:
spring.jackson.date-format=com.fasterxml.jackson.databind.util.ISO8601DateFormat
spring.jackson.time-zone=UTC
Run Code Online (Sandbox Code Playgroud)
并删除@DateTimeFormat注释
关于 LocalDate.now() 初始化。尝试以这种方式使用字段注入:
@Value("${my.date}") LocalDate myDate = LocalDate.now();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2800 次 |
| 最近记录: |