2016-07-22 64 views
3

Ich versuche, ein Objekt zu serialisieren, das eine Liste von Daten enthält, und ich möchte zu einer JSON-Liste von Daten (String) in einem bestimmten Format (JJJJ-MM-TT) serialisieren.serialisieren Liste von Daten mit Jackson

private List<Date> executionDates; 

wird werden wie:

"executionDates": [ 
    "2016-07-22", 
    "2016-07-23", 
    "2016-07-24" 
] 

Es ist möglich, es mit Anmerkungen zu tun?

Vielen Dank im Voraus.

+0

Was meinst du mit Anmerkungen? Du meinst Kommentare? Außerdem können Sie eine Liste nicht serialisieren. Um eine Liste serialisieren zu können, müssen Sie die Daten in ein Hashset setzen, da Hashsets serialisierbar sind. – Shaydoth

+0

So etwas wie '@JsonSerialize (using = JsonDateSerializer.class)' bei Getter der 'executionDates' -Variable. – lealoureiro

Antwort

5

fand ich die Lösung. Ich hatte Eigenschaft contentUsing statt using in Anmerkung wie folgt zu verwenden:

@JsonSerialize(contentUsing = JsonDateSerializer.class) 

contentUsing Eigenschaft ist für die Sammlung verwendet. Von Klasse Dokumentation:

Serializer Klasse für die Serialisierung Inhalte (Elemente eines Sammlung/Array, Werte von Maps) kommentierter Eigenschaft zu verwenden. Kann nur auf Eigenschaften (Methoden, Felder, Konstruktoren) verwendet werden, und nicht Klassen selbst (wie sie normalerweise generisch sind).

+0

Für alle, die dies beobachten: Bitte beachten Sie Konsistenz zwischen privaten Feldern Name und Getter/Setter-Methode: zum Beispiel wenn Sie eine Anmerkung auf ein privates Feld, aber seine öffentliche Getter-Methode ist anders benannt, das Endergebnis wird keine Annotation-Funktion verwenden – Chris

0

versuchen, etwas wie folgt aus:

Für Serialisierung:

@Component 
public class JsonDateSerializer extends JsonSerializer<Date> 
{ 
    // ISO 8601 
    private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

    @Override 
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) 
      throws IOException, JsonProcessingException 
    { 
     String formattedDate = dateFormat.format(date); 
     gen.writeString(formattedDate); 
    } 
} 
+0

Ich habe bereits versucht, aber ich bekomme diese Ausnahme: 'com.fasterxml.jackson.databind.JsonMappingException: java.util.Arrays $ ArrayList kann nicht in java.util.Date' umgewandelt werden. Wird nicht auf jedes Element in List angewendet, sondern auf die gesamte Auflistung. – lealoureiro

+0

Haben Sie das irgendwo in Ihrem Code? '@JsonSerialize (using = JsonDateSerializer.class)' EDIT: Haben Sie versucht, das Datum in eine Variable vom Typ Date zu setzen, anstatt die Daten in eine Array-Liste zu schreiben? – Shaydoth

+0

Ja, ich habe so: '@JsonSerialize (mit = JsonDateSerializer.class) \t public final Liste getExecutionDates() { \t \t Rückkehr executionDates; \t} '. Mit einem variablen Datum anstelle von Datumsliste funktioniert, aber ich möchte eine Liste von Daten, nicht nur ein Datum ... – lealoureiro