Después de investigar con expertos en este tema, programadores de varias áreas y maestros hemos dado con la solución al problema y la dejamos plasmada en este post.
Solución:
No hay necesidad de usar serializadores/deserializadores personalizados aquí. Use el módulo de fecha y hora de jackson-modules-java8:
Módulo de tipo de datos para que Jackson reconozca los tipos de datos de API de fecha y hora de Java 8 (JSR-310).
Este módulo agrega soporte para bastantes clases:
- Duración
- Instante
- LocalDateTime
- Fecha local
- Hora local
- Mes dia
- DesplazamientoFechaHora
- tiempo de compensación
- Período
- Año
- Año mes
- ZonedDateTime
- ID de zona
- Desplazamiento de zona
Actualización: dejar esta respuesta por razones históricas, pero no la recomiendo. Por favor, vea la respuesta aceptada arriba.
Dígale a Jackson que mapee usando su personalizado [de]clases de serialización:
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime ignoreUntil;
proporcionar clases personalizadas:
public class LocalDateTimeSerializer extends JsonSerializer
@Override
public void serialize(LocalDateTime arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException
arg1.writeString(arg0.toString());
public class LocalDateTimeDeserializer extends JsonDeserializer
@Override
public LocalDateTime deserialize(JsonParser arg0, DeserializationContext arg1) throws IOException
return LocalDateTime.parse(arg0.getText());
hecho aleatorio: si anido encima de las clases y no las hago staticel mensaje de error es raro:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported
Si está utilizando la clase ObjectMapper de fastxml, de forma predeterminada, ObjectMapper no comprende la clase LocalDateTime, por lo que debe agregar otra dependencia en su gradle/maven:
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.7.3'
Ahora necesita registrar el soporte de tipo de datos ofrecido por esta biblioteca en su objeto mapeador de objetos, esto se puede hacer de la siguiente manera:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
Ahora, en su jsonString, puede colocar fácilmente su campo java.LocalDateTime de la siguiente manera:
"user_id": 1,
"score": 9,
"date_time": "2016-05-28T17:39:44.937"
Al hacer todo esto, la conversión de su archivo Json a objeto Java funcionará bien, puede leer el archivo siguiendo:
objectMapper.readValue(jsonString, new TypeReference>()
);
Si tienes algún impasse o capacidad de afinar nuestro división eres capaz de añadir una nota y con deseo lo observaremos.