Luego de consultar expertos en la materia, programadores de deferentes ramas y maestros dimos con la solución a la interrogande y la dejamos plasmada en este post.
Solución:
Parece que necesita definir formatos para la parte de fecha y hora o usar formato basado en cadenas. Por ejemplo:
Gson gson = new GsonBuilder()
.setDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").create();
o usando java.text.DateFormat
Gson gson = new GsonBuilder()
.setDateFormat(DateFormat.FULL, DateFormat.FULL).create();
o hacerlo con serializadores:
Creo que los formateadores no pueden producir marcas de tiempo, pero este par serializador/deserializador parece funcionar
JsonSerializer ser = new JsonSerializer()
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext
context)
return src == null ? null : new JsonPrimitive(src.getTime());
;
JsonDeserializer deser = new JsonDeserializer()
@Override
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException
return json == null ? null : new Date(json.getAsLong());
;
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, ser)
.registerTypeAdapter(Date.class, deser).create();
Si usa Java 8 o superior, debe usar los serializadores/deserializadores anteriores de esta manera:
JsonSerializer ser = (src, typeOfSrc, context) -> src == null ? null
: new JsonPrimitive(src.getTime());
JsonDeserializer deser = (jSon, typeOfT, context) -> jSon == null ? null : new Date(jSon.getAsLong());
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create();
El formato anterior me parece mejor ya que tiene una precisión de hasta milisegundos.
Como señaló ML, JsonSerializer funciona aquí. Sin embargo, si está formateando entidades de base de datos, use java.sql.Date para registrar su serializador. No se necesita deserializador.
Gson gson = new GsonBuilder()
.registerTypeAdapter(java.sql.Date.class, ser).create();
Este informe de error puede estar relacionado: http://code.google.com/p/google-gson/issues/detail?id=230. Sin embargo, uso la versión 1.7.2.
valoraciones y comentarios
Tienes la opción de añadir valor a nuestro contenido informacional añadiendo tu veteranía en las crónicas.