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

jp.co.bizreach.elasticsearch4s.JsonUtils.scala Maven / Gradle / Ivy

There is a newer version: 4.0.0
Show newest version
package jp.co.bizreach.elasticsearch4s

import com.fasterxml.jackson.databind._
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.core.{JsonGenerator, JsonParser, Version}
import org.joda.time.DateTime
import org.joda.time.format.DateTimeFormat
import scala.reflect.ClassTag

private[elasticsearch4s] object JsonUtils {

  private val mapper = new ObjectMapper()
  mapper.enable(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)
  mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
  mapper.registerModule(DefaultScalaModule)
  mapper.registerModule(new SimpleModule("MyModule", Version.unknownVersion())
    .addSerializer(classOf[DateTime], new JsonSerializer[DateTime] {
      override def serialize(value: DateTime, generator: JsonGenerator, provider: SerializerProvider): Unit = {
        val formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZoneUTC()
        generator.writeString(formatter.print(value))
      }
    })
    .addDeserializer(classOf[DateTime], new JsonDeserializer[DateTime](){
      override def deserialize(parser: JsonParser, context: DeserializationContext): DateTime = {
        val formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZoneUTC()
        formatter.parseDateTime(if(parser.getValueAsString != null) parser.getValueAsString else parser.nextTextValue)
      }
    })
  )

  def serialize(doc: AnyRef): String = mapper.writeValueAsString(doc)

  def deserialize[T](json: String)(implicit c: ClassTag[T]): T = mapper.readValue(json, c.runtimeClass).asInstanceOf[T]

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy