2012-06-27 17 views
6

WRT z następującym pytaniem:JAX-RS Jackson Json Provider Data Format Wydanie

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

Chciałbym wiedzieć

  • Czy Jackson określając, że data w formacie json powinny być znormalizowane na czas uniksowy całkowitą?

dalszych pytań ...

  • Czy nastąpiła zmiana w jego postawa najbliższym niedawno?
  • Czy format daty nie powinien być znormalizowany do tego samego formatu dostarczanego przez dane wyjściowe jaxb xml?
  • dlaczego/dlaczego nie?
  • jakikolwiek wysiłek włożony w rozwiązanie tego problemu?
  • ma RestEasy pod warunkiem, że złagodzenie usterki json, który wyprowadzał datę json w ogólnie rozpoznawalnym formacie daty?

Odpowiedz

11

Niestety ludzie dla krzyczy głośno - znalazłem odpowiedzi tutaj

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

tutaj

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

tutaj

http://wiki.fasterxml.com/JacksonHowToCustomSerializers

tutaj

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

Używanie @JsonSerialize (używając = ...) sposób:

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

Ktoś zniósł tę odpowiedź. Chcesz wyjaśnić, dlaczego? Nie podoba mi się sama odpowiedź, ale są to zalecane metody. Nie można winić mnie ani mojej odpowiedzi za istnienie niezgody między jaxb a jacksonem. Musiałbyś wziąć swój rant na te dwa org. –

2

ta jest również kontrolowany przez funkcję na ObjectMapper (przynajmniej w 1.9.11 i ewentualnie wcześniej):

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

nie widzę jak zrobić deklaratywnie równowartość na itsel definicji obiektu fa.