¿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.jacksonlugar decom.fasterxml.jackson.core. Usar el segundo paquete no funcionó para mí. De hecho, mi aplicación de Jersey ni siquiera respetó la@JsonSerializedanotación.Como ha dicho @Kimble, con Jackson 2, usar el formato predeterminado es muy fácil; simplemente regístrese
JodaModuleen suObjectMapper.Para la serialización / deserialización personalizada de
DateTime, debe implementar su propiaStdScalarSerializeryStdScalarDeserializer; es bastante complicado, pero de todos modos.Por ejemplo, aquí hay un
DateTimeserializador que usaISODateFormatcon 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
@JsonFormatanotación.Básicamente, mi clase tiene un
DateTimecampo, así que puse una anotación alrededor del captador:Serializo la clase con
ObjectMapperUsamos 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.xmly agregue JodaModule en su
ObjectMapperfuente