2016-08-03 17 views
3
deaktiviert

Dies ist das Format des Datums in JSON, die ich serialisieren möchten/deserialisieren:Jackson ObjectMapper passt Daten Kontext Zeitzone, wenn Deserialisieren auch wenn ausdrücklich

„2014-06-18T06: 26: 56- 07:00"

Die Joda Datetime-Feld ist wie folgt deklariert:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssZ") 
    private DateTime dueTime; 

Der Mapper:

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT) 
      .registerModule(new JodaModule()) 
      .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); 

mapper.writeValueAsString(objectWithDT)).as("application/json") 

Im resultierenden JSON des Datum mit Zeitzone über Änderungen an:

2014-06-18T13:26:56+0000 
+0

Das JodaModule wird DateTime-Instanzen in einen Unix-Timestamp serialisieren. Wenn ich dein Beispiel ausführe, bekomme ich den folgenden String '" 1403098016000 "'. – GuiSim

Antwort

2

DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE ist eine Deserialisierung Funktion und es wird nicht berücksichtigt, wenn eine Serialisierung durchführen.

Eine mögliche Lösung ist eine ObjectMapper Instanz mit einem TimeZone zu erstellen:

ObjectMapper mapper = new ObjectMapper() 
      .enable(SerializationFeature.INDENT_OUTPUT) 
      .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE) 
      .registerModule(new JodaModule()) 
      .setTimeZone(TimeZone.getTimeZone("GMT-7")); 

Weitere Informationen erhalten Sie im DateTimeSerializer Code.