[英]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.