2011-04-17 20 views
6

Ho un Joda DateTime in una classe Order:Jackson JSON non serializzare Joda DateTime correttamente

public class Order { 
    private DateTime creationTime; 
    ... 
} 

ho inizializzato il mio mapper come segue:

mapper.configure(
     SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); 

Quando ho serializzare questa classe, mi aspetto per vedere creationTime serializzato nel formato ISO-8601 come segue

{ 
    "creationTime" : "2011-01-01T09:00:00.000-04:00" 
} 

Questo funziona perfettamente bene nel mio test unitario. Tuttavia, nella mia applicazione web, lo stesso identico codice sta serializzando tutti i campi DateTime:

{ 
    "creationTime" : { 
    "year" : 2011, 
    "dayOfMonth" : 17, 
    "dayOfWeek" : 7, 
    "era" : 1, 
    "dayOfYear" : 107, 
    "weekOfWeekyear" : 15, 
    "weekyear" : 2011, 
    "monthOfYear" : 4, 
    "yearOfEra" : 2011, 
    "yearOfCentury" : 11, 
    "centuryOfEra" : 20, 
    "millisOfSecond" : 590, 
    "millisOfDay" : 40311590, 
    "secondOfMinute" : 51, 
    "secondOfDay" : 40311, 
    "minuteOfHour" : 11, 
    "minuteOfDay" : 671, 
    "hourOfDay" : 11, 
    "millis" : 1303053111590, 
    "zone" : { 
     "fixed" : false, 
     "uncachedZone" : { 
     "cachable" : true, 
     "fixed" : false, 
     "id" : "America/New_York" 
     }, 
     "id" : "America/New_York" 
    }, 
    "chronology" : { 
     "zone" : { 
     "fixed" : false, 
     "uncachedZone" : { 
      "cachable" : true, 
      "fixed" : false, 
      "id" : "America/New_York" 
     }, 
     "id" : "America/New_York" 
     } 
    } 
} 

Cosa mi manca? Sto includendo jackson-core-asl-1.7.6.jar e jackson-mapper-asl-1.7.6.jar nel mio classpath in entrambi i casi.

In alcuni esempi online ho visto un'annotazione su DateTime. Non so se questo è necessario, ma l'ho provato nell'eternità. Vedi sotto:

public class Order { 
    @JsonSerialize(using=DateTimeSerializer.class) 
    private DateTime creationTime; 
    ... 
} 

Questo sembra non fare differenza.

Grazie.

P.S. Qualcuno sa se la mailing list di Jackson funziona? Ho postato questa domanda sulla mailing list dell'utente, ma non viene mostrata negli archivi. L'ultimo post in archivio è datata 24 giugno 2010.

+0

La mailing list funziona, ma per qualche motivo gli archivi Codehaus non funzionano. – StaxMan

+0

Grazie. Ho ricevuto molte risposte e aiuto dalla mailing list. – Naresh

+3

Quindi, qual è la soluzione? –

risposta

3

Questo sembrava fare il trucco per me: How to serialize Joda DateTime with Jackson JSON processer?

In sostanza, l'idea era quella di creare una classe che estende org.codehaus.jackson.map.JsonSerializer con un metodo serialize overried:

public void serialize(DateTime value, JsonGenerator gen, SerializerProvider arg2) throws IOException, JsonProcessingException { 
    gen.writeString(formatter.print(value)); 
} 

Quindi utilizzare il serializzatore personalizzato al posto di DateTimeSerializer.

+1

C'è un modulo jackson-datatype-joda ora - Ho postato alcuni esempi di configurazione qui: http://stackoverflow.com/a/ 14185077/125246 – paulcm

Problemi correlati