2017-07-08 5 views
0

Springブートを使用して初期化するときにYAMLプロパティファイルからカスタムプロパティをロードしようとしています。私はそれを行う方法について無数のチュートリアルを見つけ、彼らは働いています。問題は、例えばLocalDateTimeのようにPOJOSをどのようにインスタンス化するかを見つけることができないということです。私のコードは以下の通りです。YAMLプロパティファイル(Java&Spring Boot)からPOJO(LocalDateTime)をインスタンシエート

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. 
    } 
} 

私のYAMLファイルには、私の問題は、私はまた、この変形を試みた

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 

ヘルプがありますか?私は次のスレッドJSON Java 8 LocalDateTime format in Spring Bootを見ましたが、それは私の問題を解決しませんでした。

同じように、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'オブジェクトと一致しません。

助けが必要ですか?春の名誉に@ConfigurationPropertiesクラスの@DateTimeFormat注釈を想定し

+0

ISO形式の文字列を使用するとどうなりますか?例 '2007-03-01T13:00:00'? – Rafa

+0

こんにちは。あなたの答えをありがとう。私は現在、この '@DateTimeFormat(pattern =" yyyy-MM-ss HH:mm:dd "、iso = DateTimeFormat.ISO.DATE_TIME)のprivate LocalDateTime dateTime;を、そしてYAMLではdateTime:" 2007- 03-01T13:00:00 "。 'java.lang.String型のプロパティ値を' java.time.LocalDateTime '型に変換できませんでした。 –

答えて

2
  1. あなたは2011-12-03T10:15:30+01:00[Europe/Paris]あるDateTimeFormat.ISO.DATE_TIMEする形式を宣言した、(私がいることを確認していません)。あなたのプロパティファイルは2018-07-13 21:00:00ですが、これは標準フォーマットのいずれでもありません。あなたはそれがどのように機能すると思いますか?

  2. データタイプがLocalDateTimeでタイムゾーンの概念を持たないため、ISO_DATE_TIMEフォーマットと矛盾します。ただし、タイムゾーンはISO_DATE_TIMEのオプションです。これは問題ではありません。

明らかに、あなたは壁にスパゲッティを投げて、何かがくっつくのを期待しています。単体テストを作成し、必要なdatetimeオブジェクトに文字列を変換しようとします。それを済ませたら、問題があれば元に戻ってください。

関連する問題