localdatetime datatype cannot jackson java-8 java-time jackson-modules

datatype - localdatetime jackson serializer



¿Hay un módulo de tipo de datos jackson para JDK8 java.time? (6)

Como ya se mencionó, https://github.com/FasterXML/jackson-datatype-jsr310 proporciona soporte para Java 8 Time.

Desde Jackson 2.6.0, el "viejo" módulo JSR310 está en desuso. Es reemplazado por JavaTimeModule. La dependencia de Maven es la misma (puede encontrar la versión actual en Maven Central ):

<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.6.0</version> </dependency>

Tienes que registrar el módulo así:

ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule());

Tenga en cuenta que a partir de la versión 2.6, este módulo NO admite el registro automático, debido a la existencia de una versión heredada, JSR310Module. La versión heredada tiene la misma funcionalidad, pero la configuración predeterminada es ligeramente diferente: consulte com.fasterxml.jackson.datatype.jsr310. JSR310Module para más detalles.

JavaTimeModule Source en GitHub

Uso de JavaTimeModule

Estoy buscando un módulo para las nuevas clases JDK8 java.time . He revisado el Listado de proyectos de GitHub de FasterXML y actualmente no he encontrado ninguno.

Según tengo entendido, Jackson todavía está siendo compilado contra JDK6, por lo que no puede usar estas clases directamente y debe tener esto construido como un módulo separado, como se requiere con Joda.

No me importa comenzar el proyecto, aunque busco ver si ya se están realizando otros esfuerzos.


Como ya se mencionó, Spring-Boot obtendrá todo lo que necesita (tanto para web como para webflux starter). Pero lo que es aún mejor: no es necesario que registres ningún módulo por tu cuenta. Echa un vistazo here . Ya que @SpringBootApplication usa @EnableAutoConfiguration bajo el capó, significa que JacksonAutoConfiguration se agregará al contexto automáticamente. Ahora, si miras dentro de JacksonAutoConfiguration , verás:

private void configureModules(Jackson2ObjectMapperBuilder builder) { Collection<Module> moduleBeans = getBeans(this.applicationContext, Module.class); builder.modulesToInstall(moduleBeans.toArray(new Module[0])); }

Este tipo se llamará en el proceso de inicialización y buscará todos los módulos que pueda encontrar en la ruta de clase. (Yo uso Spring Boot 2.1)


La lista más completa de módulos de tipo de datos se encuentra en la página del "portal" de Jackson en Github:

https://github.com/FasterXML/jackson

que sí contiene la lista "JSR-310: soporte para" fechas de Java 8 ". La asignación de nombres es un poco opaca, pero se refiere al proceso de estandarización, a través de JSR, que debe finalizarse para producir la nueva API de fecha de Java8 (si aún no es definitiva; proceso ha tomado un tiempo).

El enlace directo es: https://github.com/FasterXML/jackson-datatype-jsr310



Si usa Spring Boot 2 y depende del spring-boot-starter-web arrancador, tendría como dependencias tanto el obsoleto (jackson-datatype-jsr310) como el real (jackson-datatype-jdk8).

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.0.0.M3:compile [INFO] | +- org.springframework.boot:spring-boot-starter-json:jar:2.0.0.M3:compile [INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.0.pr4:compile [INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.0.pr4:compile