genobis
8/22/2017 - 5:14 AM

Własna (de)serializacja dat z użyciem Jackson (ISO-8601 <---> LocalDateTime)

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;
}