2016-05-31 9 views
2

Ich versuche, Foo in eine String zu serialisieren. Es scheint wie eine ziemlich einfache Aufgabe, aber aus irgendeinem Grund scheint DateTime es zu brechen.JsonGenerationException: CSV-Generator unterstützt keine Objektwerte für Eigenschaften

Test.java

import com.fasterxml.jackson.dataformat.csv.CsvMapper; 
import com.fasterxml.jackson.dataformat.csv.CsvSchema; 
import java.io.IOException; 
import java.sql.Timestamp; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.joda.time.DateTime; 

public class Test { 

    public static void main(String args[]) { 
     try { 
      List<Foo> foos = new ArrayList<>(); 
      Foo foo = new Foo(); 
      foo.setID(1); 
      foo.setCURRENT(new DateTime(new Timestamp(System.currentTimeMillis()))); 
      foos.add(foo); 
      String content = serialize(foos, Foo.class, Boolean.TRUE); 
      System.out.println(content); 
     } catch (IOException ex) { 
      Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public static final synchronized String serialize(final Object object, final Class type, final Boolean withHeaders) throws IOException { 
     CsvMapper csvMapper = new CsvMapper(); 
     CsvSchema csvSchema; 
     if (withHeaders) { 
      csvSchema = csvMapper.schemaFor(type).withHeader(); 
     } else { 
      csvSchema = csvMapper.schemaFor(type).withoutHeader(); 
     } 
     return csvMapper.writer(csvSchema).writeValueAsString(object); 
    } 

} 

Foo.java

import org.joda.time.DateTime; 

public class Foo { 

    private Integer ID; 
    private DateTime CURRENT; 

    public Foo() { 
    } 

    public Integer getID() { 
     return ID; 
    } 

    public void setID(Integer ID) { 
     this.ID = ID; 
    } 

    public DateTime getCURRENT() { 
     return CURRENT; 
    } 

    public void setCURRENT(DateTime CURRENT) { 
     this.CURRENT = CURRENT; 
    } 

} 

Ich habe versucht, @JsonGetter und @JsonSetter in meinem Foo Objekt verwenden, aber es ist nicht wirklich eine Wirkung zu erzielen.

Was verursacht diesen Fehler?

Antwort

1

Sind Sie einschließlich Datentyp Modul für Joda DateTime? Die, die Sie benötigen, ist jackson-datatype-joda, von https://github.com/FasterXML/jackson-datatype-joda. Wenn nicht, würde das das Problem erklären, da Werte als normale POJOs betrachtet würden und CSV nicht für verschachtelte Daten geeignet wäre, ohne dass eine Zuordnung zur Punktnotation erforderlich wäre.

Verwandte Themen