Skip to content

Instantly share code, notes, and snippets.

@chadselph
Created November 19, 2014 02:30

Revisions

  1. chadselph created this gist Nov 19, 2014.
    28 changes: 28 additions & 0 deletions JacksonJsonSupport.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,28 @@
    import com.fasterxml.jackson.databind.ObjectMapper
    import com.fasterxml.jackson.module.scala.DefaultScalaModule
    import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
    import spray.http.{ContentTypes, HttpCharsets, HttpEntity, MediaTypes}
    import spray.httpx.marshalling.Marshaller
    import spray.httpx.unmarshalling.Unmarshaller

    /**
    * Use Jackson directly to avoid json4s's dependencies
    */
    trait JacksonJsonSupport {

    val jacksonModules = Seq(DefaultScalaModule)

    val mapper = new ObjectMapper() with ScalaObjectMapper
    mapper.registerModules(jacksonModules:_*)

    implicit def jacksonJsonUnmarshaller[T : Manifest] =
    Unmarshaller[T](MediaTypes.`application/json`) {
    case x: HttpEntity.NonEmpty =>
    val jsonSource = x.asString(defaultCharset = HttpCharsets.`UTF-8`)
    mapper.readValue[T](jsonSource)
    }

    implicit def jacksonJsonMarshaller[T <: AnyRef] =
    Marshaller.delegate[T, String](ContentTypes.`application/json`)(mapper.writeValueAsString(_))

    }