2017-07-08 1 views
0

Ich versuche, benutzerdefinierte Eigenschaften aus einer YAML-Eigenschaftendatei bei der Initialisierung mit Spring Boot zu laden. Ich habe unzählige Tutorials gefunden, wie man das macht, und sie arbeiten. Das Problem ist, dass ich keinen Weg finden kann, POJOS zu instanziieren, wie zum Beispiel LocalDateTime. Mein Code ist wie folgt.Instanziieren von POJO (LocalDateTime) aus der YAML-Eigenschaftendatei (Java & Spring Boot)

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

Meine YAML-Datei ist zur Zeit wie folgt

default-film-showings: 
    filmShowings: 
    - id: 1 
     dateTime: 2018-07-13 21:00:00 

Mein Problem ist, dass ich den folgenden Fehler bei der Initialisierung erhalten

Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDateTime' for property 'filmShowings[0].dateTime'; 

Ich habe auch versucht, diese Variante

default-film-showings: 
    filmShowings: 
    - id: 1 
     dateTime: 
     date: 
      year: 2018 
      month: 7 
      day: 13 
     time: 
      hour: 21 
      minute: 0 
      second: 0 
      nano: 0 

aber ich habe der folgende Fehler

Error creating bean with name 'filmShowings': Could not bind properties to FilmShowings 

Irgendwelche Hilfe? Ich schaute auf den folgenden Thread JSON Java 8 LocalDateTime format in Spring Boot, aber es löste mein Problem nicht.

Gibt es eine ähnliche Möglichkeit, das Film POJO Attribut mit einer anderen Standardeigenschaft zu verknüpfen?

Sagen wir, ich habe folgendes in meiner Properties-Datei

default-films: 
    films: 
    - id: 1 
     filmName: Spider-Man 

kann ich so etwas wie dies auch hinzufügen?

default-film-showings: 
    filmShowings: 
    - id: 1 
     film: default-films.films[0] 
     dateTime: whatever I need to do here to make it work 

Es liest default-films.films [0] als String und passende somit nicht Gegenstand 'der YAML'.

Irgendwelche Hilfe?

+0

Was passiert, wenn Sie mit der Zeichenfolge im ISO-Format versuchen. Beispiel '2007-03-01T13: 00: 00'? – Rafa

+0

Hallo. Vielen Dank für Ihre Antwort. Ich habe derzeit etwas wie diese '@DateTimeFormat (Muster =" JJJJ-MM-ss HH: mm: dd ", iso = DateTimeFormat.ISO.DATE_TIME) private LocalDateTime dateTime;' und in der YAML ich 'dateTime:" 2007- 03-01T13: 00: 00 "'. Der folgende Fehler ist aufgetreten: Fehler beim Konvertieren des Eigenschaftswerts vom Typ 'java.lang.String' in den erforderlichen Typ 'java.time.LocalDateTime'' –

Antwort

2
  1. Unter der Annahme, Frühling ehrt die @DateTimeFormat Anmerkung in einer @ConfigurationProperties Klasse (ich habe nicht nachgewiesen, dass), das Format deklariert haben DateTimeFormat.ISO.DATE_TIME zu sein, die 2011-12-03T10:15:30+01:00[Europe/Paris] ist. Ihre Eigenschaftendatei hat 2018-07-13 21:00:00, die keines der Standardformate ist. Wie erwarten Sie, dass es funktioniert?

  2. Ihr Datentyp ist LocalDateTime, der kein Zeitzonen-Konzept hat und damit dem Format ISO_DATE_TIME widerspricht. Die Zeitzone ist jedoch optional für ISO_DATE_TIME, daher ist dies möglicherweise kein Problem.

Offensichtlich sind Sie Spaghetti an die Wand zu werfen und etwas Hoffnung, würde bleiben. Schreiben Sie einen Komponententest und versuchen Sie, die Zeichenfolge in das gewünschte Datum/Uhrzeit-Objekt zu konvertieren. Sobald Sie das getan haben, kommen Sie zurück, wenn Sie ein Problem haben.

Verwandte Themen