2012-06-27 10 views
6

WRT a la siguiente pregunta:JAX-RS Jackson JSON Proveedor de formato de fecha de emisión

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

Deseo saber

  • Jackson está especificando que el formato de fecha JSON debe ser normalizado a un número entero de tiempo Unix?

preguntas de seguimiento ...

  • ha habido un cambio en su postura en cualquier momento recientemente?
  • ¿No debería un formato de fecha normalizarse con el mismo formato proporcionado por jaxb xml output?
  • por qué/por qué no?
  • ¿hay algún esfuerzo para resolver este problema?
  • ¿Ha proporcionado RestEasy una mitigación de proveedor json que daría salida a la fecha json en un formato de fecha generalmente reconocible?

Respuesta

11

la gente lo siento por gritar en voz alta - Me encontraron las respuestas aquí

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

aquí

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

aquí

http://wiki.fasterxml.com/JacksonHowToCustomSerializers

aquí

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

Utilizando el @JsonSerialize (usando = ...) así:

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

Alguien ha desvirtuado esta respuesta. Cuidado para explicar por qué? No me gusta la respuesta, pero esa es la forma recomendada de hacerlo. No puedes culparme ni a mí ni a mi respuesta por la existencia de un desacuerdo entre jaxb y jackson. Tendría que sacar su diatriba en esas dos organizaciones. –

2

Esto también es controlado por una característica en el ObjectMapper (al menos en 1.9.11 y posiblemente antes):

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

No veo cómo declarativamente hacer el equivalente en la definición del objeto itsel F.

Cuestiones relacionadas