¿Cómo hago para que Jackson serialice mi objeto Joda DateTime de acuerdo con un patrón simple (como "dd-MM-aaaa")?
He intentado:
@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;
También he probado:
ObjectMapper mapper = new ObjectMapper()
.getSerializationConfig()
.setDateFormat(df);
¡Gracias!
Respuestas:
Esto se ha vuelto muy fácil con Jackson 2.0 y el módulo Joda.
Dependencia de Maven:
Código y documentación: https://github.com/FasterXML/jackson-datatype-joda
Binarios: http://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-joda/
fuente
En el objeto que estás mapeando:
En CustomDateSerializer:
fuente
org.codehaus.jackson
lugar decom.fasterxml.jackson.core
. Usar el segundo paquete no funcionó para mí. De hecho, mi aplicación de Jersey ni siquiera respetó la@JsonSerialized
anotación.Como ha dicho @Kimble, con Jackson 2, usar el formato predeterminado es muy fácil; simplemente regístrese
JodaModule
en suObjectMapper
.Para la serialización / deserialización personalizada de
DateTime
, debe implementar su propiaStdScalarSerializer
yStdScalarDeserializer
; es bastante complicado, pero de todos modos.Por ejemplo, aquí hay un
DateTime
serializador que usaISODateFormat
con la zona horaria UTC:Y el deserializador correspondiente:
Luego, une estos con un módulo:
Luego registre el módulo en su
ObjectMapper
:fuente
La solucion facil
Me he encontrado con un problema similar y mi solución es mucho más clara que la anterior.
Simplemente usé el patrón en la
@JsonFormat
anotación.Básicamente, mi clase tiene un
DateTime
campo, así que puse una anotación alrededor del captador:Serializo la clase con
ObjectMapper
Usamos Jackson 2.5.4
fuente
https://stackoverflow.com/a/10835114/1113510
Aunque puede poner una anotación para cada campo de fecha, es mejor hacer una configuración global para su mapeador de objetos. Si usa jackson, puede configurar su resorte de la siguiente manera:
Para CustomObjectMapper:
Por supuesto, SimpleDateFormat puede usar cualquier formato que necesite.
fuente
setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"));
me hizo el truco, graciasMientras tanto, Jackson registra el módulo Joda automáticamente cuando JodaModule está en classpath. Acabo de agregar jackson-datatype-joda a Maven y funcionó al instante.
Salida JSON:
fuente
Para aquellos con Spring Boot, debe agregar el módulo a su contexto y se agregará a su configuración de esta manera.
Y si desea utilizar el nuevo módulo de tiempo java8 jsr-310.
fuente
Parece que para Jackson 1.9.12 no existe tal posibilidad de forma predeterminada, debido a:
Esta clase serializa datos utilizando el método toString () de Joda DateTime.
El enfoque propuesto por Rusty Kuntz funciona perfecto para mi caso.
fuente
Estoy usando Java 8 y esto funcionó para mí.
Agregue la dependencia en
pom.xml
y agregue JodaModule en su
ObjectMapper
fuente