Tabii ki serileştirme ve serileştirme adı verilen otomatik bir yol var ve bunu pb2q tarafından da belirtildiği gibi belirli ek açıklamalarla ( @JsonSerialize , @JsonDeserialize ) tanımlayabilirsiniz .
Hem java.util.Date hem de java.util.Calendar ... ve muhtemelen JodaTime'ı kullanabilirsiniz.
@JsonFormat ek açıklamaları , serileştirme sırasında (serileştirme mükemmel çalıştı) istediğim gibi (zaman dilimini farklı değere ayarladı ) benim için çalışmadı:
@JsonFormat(locale = "hu", shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "CET")
@JsonFormat(locale = "hu", shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "Europe/Budapest")
Tahmin edilen sonuç istiyorsanız @JsonFormat ek açıklaması yerine özel serileştirici ve özel serileştirici kullanmanız gerekir. Burada gerçekten iyi bir öğretici ve çözüm buldum http://www.baeldung.com/jackson-serialize-dates
Tarih alanları için örnekler var, ancak Takvim alanları için gerekliyim, işte benim uygulama :
Serileştirici sınıfı:
public class CustomCalendarSerializer extends JsonSerializer<Calendar> {
public static final SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm");
public static final Locale LOCALE_HUNGARIAN = new Locale("hu", "HU");
public static final TimeZone LOCAL_TIME_ZONE = TimeZone.getTimeZone("Europe/Budapest");
@Override
public void serialize(Calendar value, JsonGenerator gen, SerializerProvider arg2)
throws IOException, JsonProcessingException {
if (value == null) {
gen.writeNull();
} else {
gen.writeString(FORMATTER.format(value.getTime()));
}
}
}
Deserializer sınıfı:
public class CustomCalendarDeserializer extends JsonDeserializer<Calendar> {
@Override
public Calendar deserialize(JsonParser jsonparser, DeserializationContext context)
throws IOException, JsonProcessingException {
String dateAsString = jsonparser.getText();
try {
Date date = CustomCalendarSerializer.FORMATTER.parse(dateAsString);
Calendar calendar = Calendar.getInstance(
CustomCalendarSerializer.LOCAL_TIME_ZONE,
CustomCalendarSerializer.LOCALE_HUNGARIAN
);
calendar.setTime(date);
return calendar;
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
ve yukarıdaki sınıfların kullanımı :
public class CalendarEntry {
@JsonSerialize(using = CustomCalendarSerializer.class)
@JsonDeserialize(using = CustomCalendarDeserializer.class)
private Calendar calendar;
// ... additional things ...
}
Bu uygulamayı kullanarak, serileştirme ve serileştirme işleminin yürütülmesi art arda başlangıç değerine yol açar.
Sadece @JsonFormat ek açıklamasını kullanarak, serileştirme farklı sonuç verir, çünkü ek açıklama parametreleriyle değiştiremeyeceğiniz kütüphane iç saat dilimi varsayılan ayarı nedeniyle (bu Jackson kütüphanesi 2.5.3 ve 2.6.3 sürümü ile de benim deneyimimdi).