jsonsyntaxexception google deserialize java timestamp gson

java - google - ¿GSon desordena las variables de marca de tiempo?



spring gson date format (2)

2013-02-18 15: 49: 36.415, que se convirtió en 18 de febrero 2013 3:49:36 PM

y estos son diferentes, ¿cómo? Esto simplemente se ve como un problema de representación y su marca de tiempo se está convirtiendo en una cadena a través de SimpleDateFormat o similar.

Estoy tratando de enviar una clase sobre sockets, y todo funciona bien. Sin embargo, una de las variables se arruina sin razón aparente. Déjame explicarte más.

El código que estoy usando es el siguiente (para el socket de Cliente, donde se crea el GSon):

while(!someQueueVariable.isEmpty()){ QueryHolder h = this.someQueueVariable.poll(); Gson g = new Gson(); String send = g.toJson(h); out.println(send); }

QueryHolder es una clase simple que contiene dos Strings y un Object[] .

Probé el depurador integrado de Netbeans, y estas variables estaban presentes: Los resaltados en azul son los que deberías mirar. Como puede ver, primero había un objeto Timestamp con el valor de 2013-02-18 15:49:36.415 , que se convirtió en Feb 18, 2013 3:49:36PM . ¿Estoy haciendo algo mal aquí? ¿Es un error en GSon?


La Guía del usuario de Gson menciona esto cuando se habla de crear serializadores / deserializadores personalizados. Lo que está viendo es la serialización predeterminada para su objeto java.sql.Timestamp (que es una subclase de Date ) que es para dar salida / formatearlo en el formato de su configuración regional.

Si observa el Javadoc para GsonBuilder () , encontrará un método setDateFormat() que se creó específicamente para su problema: ya no requiere un serializador personalizado. Solo necesita proporcionar el patrón que desea en su JSON:

public static void main(String[] args) { Timestamp t = new Timestamp(System.currentTimeMillis()); System.out.println(t); System.out.println(t.toLocaleString()); String json = new Gson().toJson(t); System.out.println(json); json = new GsonBuilder() .setDateFormat("yyyy-MM-dd hh:mm:ss.S") .create() .toJson(t); System.out.println(json); }

Salida (a partir de ahora, obviamente):

2013-02-18 11: 32: 21.825
18 de febrero de 2013 11:32:21 a.m.
"18 de febrero de 2013 11:32:21 a.m."
"2013-02-18 11: 32: 21.825"