Własna (de)serializacja dat z użyciem Jackson (ISO-8601 <---> LocalDateTime)
public class ISOLocalDateSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
jg.writeString(Optional.ofNullable(value).map(v -> v.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)).orElse("UNKNOWN"));
}
}
public class ISOLocalDateDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException, JsonProcessingException {
final String dateStr = jsonparser.getText();
final LocalDateTime date;
if(dateStr==null || dateStr.equalsIgnoreCase("unknown")) {
return null;
}
else {
return LocalDateTime.parse(dateStr);
}
}
}
public class Foo {
@JsonSerialize(using = ISOLocalDateSerializer.class)
@JsonDeserialize(using = ISOLOcalDataDeserializer.class)
private final LocalDateTime bar;
}