001package org.gbif.api.jackson;
002
003import com.fasterxml.jackson.core.JsonGenerator;
004import com.fasterxml.jackson.core.JsonParser;
005import com.fasterxml.jackson.databind.DeserializationContext;
006import com.fasterxml.jackson.databind.JsonDeserializer;
007import com.fasterxml.jackson.databind.JsonSerializer;
008import com.fasterxml.jackson.databind.SerializerProvider;
009import java.io.IOException;
010import java.time.OffsetDateTime;
011import java.time.format.DateTimeFormatter;
012
013/**
014 * Jackson {@link JsonSerializer} and {@link JsonDeserializer} classes for {@link OffsetDateTime}.
015 */
016public class OffsetDateTimeSerDe {
017
018  private static final DateTimeFormatter FORMATTER =
019    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssXXX");
020
021  /**
022   * Jackson {@link JsonSerializer} for {@link OffsetDateTime}.
023   */
024  public static class OffsetDateTimeSerializer extends JsonSerializer<OffsetDateTime> {
025    @Override
026    public void serialize(OffsetDateTime value, JsonGenerator jgen, SerializerProvider provider)
027      throws IOException {
028      jgen.writeString(value.format(FORMATTER));
029    }
030  }
031
032  /**
033   * Jackson {@link JsonDeserializer} for {@link OffsetDateTime}.
034   */
035  public static class OffsetDateTimeDeserializer extends JsonDeserializer<OffsetDateTime> {
036    @Override
037    public OffsetDateTime deserialize(JsonParser jp, DeserializationContext ctxt)
038      throws IOException {
039      return OffsetDateTime.parse(jp.getText(), FORMATTER);
040    }
041  }
042}