2016-05-31 1 views
2

String으로 직렬화하려고합니다. 그것은 꽤 간단한 작업처럼 보이지만 어떤 이유로 DateTime이 그것을 깨뜨리는 것처럼 보입니다.JsonGenerationException : CSV 생성기가 속성의 객체 값을 지원하지 않습니다.

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

} 

Foo 객체 @JsonGetter@JsonSetter를 사용하여 시도했지만 정말 어떤 영향을하지 않습니다.

이 오류의 원인은 무엇입니까?

답변

1

Joda DateTime에 대한 데이터 유형 모듈을 포함하고 있습니까? 필요한 것은 jackson-datatype-joda, https://github.com/FasterXML/jackson-datatype-joda입니다. 그렇지 않은 경우 값이 일반 POJO로 표시되고 CSV는 중첩 된 데이터에 적합하지 않으므로 점선으로 된 표기법에 매핑 할 필요가 없기 때문에 문제를 설명 할 수 있습니다.