Serialization for Java Calendar
From JSON to Calendar
Create a JsonSerializer
:
public class CalendarSerializer extends JsonSerializer<Calendar> { private SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); @Override public void serialize(Calendar calendar, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { String dateAsString = formatter.format(calendar.getTime()); jsonGenerator.writeString(dateAsString); }}
And then use it:
@JsonSerialize(using = CalendarSerializer.class)private Calendar calendar;
From Calendar
to JSON
Create a JsonDeserializer
:
public class CalendarDeserializer extends JsonDeserializer<Calendar> { private SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); @Override public Calendar deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { String dateAsString = jsonParser.getText(); try { Date date = formatter.parse(dateAsString); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } catch (Exception e) { throw new IOException(e); } }
And then use it:
@JsonDeserialize(using = CalendarDeserializer.class)private Calendar calendar;
If the only data you need as json is a date, you can using Gson:
JsonObject albums = new JsonObject();albums.addProperty("date", new Date());
if your json instead has more than that, you can sonsider to define your own class and serialze it by adding this method to the defined class:
public String toJson() { Gson gson = new Gson(); return gson.toJson(this); }