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}