[英]Instantiating POJO (LocalDateTime) from YAML Properties File (Java & Spring Boot)
我正在尝试使用 Spring Boot 在初始化时从 YAML 属性文件加载自定义属性。 我找到了无数关于如何做到这一点的教程,而且它们很有效。 问题是我似乎找不到如何实例化 POJOS 的方法,例如 LocalDateTime。 我的代码如下所示。
@Configuration
@ConfigurationProperties(prefix="default-film-showings")
public class FilmShowings {
private List<FilmShowing> filmShowings;
//Constructors, Getters, setters etc.
public static class FilmShowing {
private Integer id;
private Film film;
private Theatre theatre;
private LocalDateTime dateTime;
//Constructors, Getters, setters etc.
}
}
我的YAML文件目前如下
default-film-showings:
filmShowings:
- id: 1
dateTime: 2018-07-13 21:00:00
我的问题是初始化时出现以下错误
Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDateTime' for property 'filmShowings[0].dateTime';
我也试过这个变体
default-film-showings:
filmShowings:
- id: 1
dateTime:
date:
year: 2018
month: 7
day: 13
time:
hour: 21
minute: 0
second: 0
nano: 0
但我收到以下错误
Error creating bean with name 'filmShowings': Could not bind properties to FilmShowings
有什么帮助吗? 我在 Spring Boot 中查看了以下线程 JSON Java 8 LocalDateTime 格式,但它没有解决我的问题。
同样,有没有办法将 Film POJO 属性链接到另一个默认属性?
假设我的属性文件中有以下内容
default-films:
films:
- id: 1
filmName: Spider-Man
我也可以添加这样的东西吗?
default-film-showings:
filmShowings:
- id: 1
film: default-films.films[0]
dateTime: whatever I need to do here to make it work
它将 default-films.films[0] 读取为字符串,因此不匹配“YAML”对象。
有什么帮助吗?
假设 Spring 支持@ConfigurationProperties
类中的@DateTimeFormat
批注(我尚未验证),您已将格式声明为DateTimeFormat.ISO.DATE_TIME ,即2011-12-03T10:15:30+01:00[Europe/Paris]
。 您的属性文件有2018-07-13 21:00:00
这不是任何标准格式。 你期望它如何工作?
您的数据类型是LocalDateTime
,它没有时区概念,因此与ISO_DATE_TIME
格式相矛盾。 但是,ISO_DATE_TIME 的时区是可选的,因此这可能不是问题。
显然,您是在往墙上扔意大利面条,希望有什么东西能粘住。 编写单元测试并尝试将字符串转换为您想要的任何日期时间对象。 完成后,如果遇到问题,请回来。
您应该只调整配置类中的设置器。
如果你的 yaml 是:
default-film-showings:
filmShowings:
- id: 1
dateTime: 2018-07-13 21:00:00
然后在您的配置类中执行此操作:
@Configuration
@ConfigurationProperties(prefix="default-film-showings")
public class FilmShowings {
private List<FilmShowing> filmShowings;
//Constructors, Getters, setters etc.
public static class FilmShowing {
private Integer id;
private Film film;
private Theatre theatre;
private LocalDateTime dateTime;
//Constructors, Getters, setters etc.
public void setDateTime(String dateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd
HH:mm:ss");
LocalDateTime formatDateTime = LocalDateTime.parse(dateTime, formatter);
this.dateTime= formatDateTime;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.