2012-06-27 10 views
6

WRT alla seguente domanda:JAX-RS Jackson JSON Provider Formato data di emissione

Jersey + Jackson JSON date format serialization - how to change the format or use custom JacksonJsonProvider.

Vorrei sapere

  • è Jackson specificando che il formato della data JSON deve essere normalizzato ad un tempo intero unix?

domande di follow-up ...

  • C'è stato un cambiamento nella sua presa di posizione in qualsiasi momento di recente?
  • Non si dovrebbe normalizzare un formato di data nello stesso formato fornito dall'output xax di jaxb?
  • perché/perché no?
  • qualsiasi tentativo di risolvere questo problema?
  • ha RestEasy fornito un attenuazione del fornitore json che avrebbe prodotto la data di JSON in un formato di data generalmente riconoscibile?

risposta

11

persone dispiace per gridare ad alta voce - ho trovato le risposte qui

http://wiki.fasterxml.com/JacksonFAQDateHandling,

qui

http://wiki.fasterxml.com/JacksonFAQ#Serializing_Dates,

qui

http://wiki.fasterxml.com/JacksonHowToCustomSerializers

qui

http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/map/util/StdDateFormat.html

Uso della @JsonSerialize (usando = ...) modo:

public class JsonStdDateSerializer 
extends JsonSerializer<Date> { 
    private static final DateFormat iso8601Format = 
    StdDateFormat.getBlueprintISO8601Format(); 

    @Override 
    public void serialize(
    Date date, JsonGenerator jgen, SerializerProvider provider) 
    throws IOException, JsonProcessingException { 

    // clone because DateFormat is not thread-safe 
    DateFormat myformat = (DateFormat) iso8601Format.clone(); 
    String formattedDate = myformat.format(date); 
    jgen.writeString(formattedDate); 
    } 
} 
+3

Qualcuno ha downvoted questa risposta. Ti va di spiegarti perché? Non mi piace molto la risposta da solo, ma quelli sono il modo consigliato per aggirarlo. Non puoi incolpare me o la mia risposta per l'esistenza di un disaccordo tra jaxb e jackson. Dovresti prendere il tuo sfogo con quelle due org. –

2

Questo è controllato anche da un servizio sul ObjectMapper (almeno in 1.9.11 , e forse prima):

ObjectMapper om = new ObjectMapper(); 
om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); 
om.writer().writeValue(System.out, objectWithDateProperty); 

Non vedo come fare in modo dichiarativo l'equivalente sulla definizione dell'oggetto f.

Problemi correlati