All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.jackson.map.ext.JodaSerializers Maven / Gradle / Ivy

There is a newer version: 7.4.3.112-ga112
Show newest version
package org.codehaus.jackson.map.ext;

import java.io.IOException;
import java.util.*;

import org.joda.time.*;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;

import org.codehaus.jackson.*;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.map.ser.std.SerializerBase;
import org.codehaus.jackson.map.ser.std.ToStringSerializer;
import org.codehaus.jackson.map.util.Provider;

/**
 * Provider for serializers that handle some basic data types
 * for Joda date/time library.
 *

* Since version 1.5, more types are supported. These types use slightly * different approach to serialization than core date types: "timestamp" * notation is implemented using JSON arrays, for improved readability. * * @since 1.4 */ public class JodaSerializers implements Provider,JsonSerializer>> { final static HashMap,JsonSerializer> _serializers = new HashMap,JsonSerializer>(); static { _serializers.put(DateTime.class, new DateTimeSerializer()); _serializers.put(LocalDateTime.class, new LocalDateTimeSerializer()); _serializers.put(LocalDate.class, new LocalDateSerializer()); _serializers.put(DateMidnight.class, new DateMidnightSerializer()); // [JACKSON-706]: _serializers.put(Period.class, ToStringSerializer.instance); } public JodaSerializers() { } @Override public Collection,JsonSerializer>> provide() { return _serializers.entrySet(); } /* /********************************************************** /* Intermediate base classes /********************************************************** */ protected abstract static class JodaSerializer extends SerializerBase { final static DateTimeFormatter _localDateTimeFormat = ISODateTimeFormat.dateTime(); final static DateTimeFormatter _localDateFormat = ISODateTimeFormat.date(); protected JodaSerializer(Class cls) { super(cls); } protected String printLocalDateTime(ReadablePartial dateValue) throws IOException, JsonProcessingException { return _localDateTimeFormat.print(dateValue); } protected String printLocalDate(ReadablePartial dateValue) throws IOException, JsonProcessingException { return _localDateFormat.print(dateValue); } protected String printLocalDate(ReadableInstant dateValue) throws IOException, JsonProcessingException { return _localDateFormat.print(dateValue); } } /* /********************************************************** /* Concrete serializers /********************************************************** */ public final static class DateTimeSerializer extends JodaSerializer { public DateTimeSerializer() { super(DateTime.class); } @Override public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { if (provider.isEnabled(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS)) { jgen.writeNumber(value.getMillis()); } else { jgen.writeString(value.toString()); } } @Override public JsonNode getSchema(SerializerProvider provider, java.lang.reflect.Type typeHint) { return createSchemaNode(provider.isEnabled(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS) ? "number" : "string", true); } } /** * * @since 1.5 */ public final static class LocalDateTimeSerializer extends JodaSerializer { public LocalDateTimeSerializer() { super(LocalDateTime.class); } @Override public void serialize(LocalDateTime dt, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { if (provider.isEnabled(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS)) { // Timestamp here actually means an array of values jgen.writeStartArray(); jgen.writeNumber(dt.year().get()); jgen.writeNumber(dt.monthOfYear().get()); jgen.writeNumber(dt.dayOfMonth().get()); jgen.writeNumber(dt.hourOfDay().get()); jgen.writeNumber(dt.minuteOfHour().get()); jgen.writeNumber(dt.secondOfMinute().get()); jgen.writeNumber(dt.millisOfSecond().get()); jgen.writeEndArray(); } else { jgen.writeString(printLocalDateTime(dt)); } } @Override public JsonNode getSchema(SerializerProvider provider, java.lang.reflect.Type typeHint) { return createSchemaNode(provider.isEnabled(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS) ? "array" : "string", true); } } public final static class LocalDateSerializer extends JodaSerializer { public LocalDateSerializer() { super(LocalDate.class); } @Override public void serialize(LocalDate dt, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { if (provider.isEnabled(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS)) { // Timestamp here actually means an array of values jgen.writeStartArray(); jgen.writeNumber(dt.year().get()); jgen.writeNumber(dt.monthOfYear().get()); jgen.writeNumber(dt.dayOfMonth().get()); jgen.writeEndArray(); } else { jgen.writeString(printLocalDate(dt)); } } @Override public JsonNode getSchema(SerializerProvider provider, java.lang.reflect.Type typeHint) { return createSchemaNode(provider.isEnabled(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS) ? "array" : "string", true); } } public final static class DateMidnightSerializer extends JodaSerializer { public DateMidnightSerializer() { super(DateMidnight.class); } @Override public void serialize(DateMidnight dt, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException { if (provider.isEnabled(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS)) { // same as with other date-only values jgen.writeStartArray(); jgen.writeNumber(dt.year().get()); jgen.writeNumber(dt.monthOfYear().get()); jgen.writeNumber(dt.dayOfMonth().get()); jgen.writeEndArray(); } else { jgen.writeString(printLocalDate(dt)); } } @Override public JsonNode getSchema(SerializerProvider provider, java.lang.reflect.Type typeHint) { return createSchemaNode(provider.isEnabled(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS) ? "array" : "string", true); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy