All Downloads are FREE. Search and download functionalities are using the official Maven repository.

yoda.commons.JodaJacksonModule.scala Maven / Gradle / Ivy

/*
 * Copyright (C) 2020 Be ID Corporation Co., Ltd. 
 */

package yoda.commons

import com.fasterxml.jackson.core.{JsonGenerator, JsonParser}
import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.databind.{DeserializationContext, SerializerProvider}
import org.joda.time.DateTime

/**
  * Created by Peerapat A on Mar 18, 2017
  */
object JodaJacksonModule extends SimpleModule with ISODateTime {

  addDeserializer(classOf[DateTime], (p: JsonParser
                                      , context: DeserializationContext) => parseDateTime(p.getText))

  addSerializer(classOf[DateTime], (value: DateTime
                                    , gen: JsonGenerator
                                    , serializers: SerializerProvider) => writeString(value, gen))

  def parseDateTime(s: String): DateTime = {
    val dto = s.replace("T", " ")
    val dt = dto.split('.')

    dt.length match {
      case 1 => try {
        FORMATER_ISO_SEC.parseDateTime(dt(0))
      } catch {
        case t: Throwable => FORMATER_ISO_SEC_TZ.parseDateTime(dt(0))
      }

      case 2 => try {
        FORMATER_ISO_MILLIS.parseDateTime(dto)
      } catch {
        case t: Throwable => FORMATER_ISO_MILLIS_TZ.parseDateTime(dto)
      }
    }
  }

  private def writeString(dt: DateTime, gen: JsonGenerator): Unit = {
    gen.writeString(FORMATER_ISO_MILLIS_TZ.print(dt))
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy