Saltar al contenido

Formato de fecha de Jackson para OffsetDateTime en Spring Boot

Por fin luego de tanto batallar ya hallamos el resultado de esta contrariedad que tantos lectores de nuestro espacio han tenido. Si quieres compartir algo no dudes en compartir tu información.

Solución:

Así que logré encontrar una solución, pero si tiene una alternativa, publíquela.

Terminé creando una nueva primaria ObjectMapper bean, y registrando un nuevo módulo con un serializador personalizado para OffsetDateTime. Puedo configurar mi propio formato de fecha aquí, usando java.time.format.DateTimeFormatter. También tuve que registrar el JavaTimeModule con mi mapeador.

@Configuration
public class JacksonOffsetDateTimeMapper

    @Primary
    @Bean
    public ObjectMapper objectMapper() 

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer() 
            @Override
            public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException 
                jsonGenerator.writeString(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(offsetDateTime));
            
        );
        objectMapper.registerModule(simpleModule);

        return objectMapper;
    


ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

Al hacerlo, puede obtener propiedades de OffsetDateTime como ISO 8601, incluido el desplazamiento en su objetivo.

Agregar una dependencia en jackson-modules-java8 funcionó para mí (jackson-datatype-jsr310 está en desuso)

 
 
  com.fasterxml.jackson.module
  jackson-modules-java8

También necesitaba agregar esto para que funcione:

 om.registerModule(new JavaTimeModule());

No es necesario el write-dates-as-timestamps=false o om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) – que es aplicable para el objeto Java “Date”.

Usé esta anotación:

 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")  

y obtener una salida como esta:

“marca de tiempo”:”2020-04-23T08:00:00.000-06:00″

Si te gustó nuestro trabajo, eres capaz de dejar un escrito acerca de qué te ha impresionado de esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *