Open
Description
I am trying to make a simple example using play-json
, but am running into a run-time error.
build.sbt
name := "JsonApiTest"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
"org.zalando" %% "scala-jsonapi" % "0.5.2",
"com.typesafe.play" %% "play-json" % "2.5.4",
"io.spray" %% "spray-httpx" % "1.3.3"
)
main.scala
import org.zalando.jsonapi.{JsonapiRootObjectWriter, _}
import org.zalando.jsonapi.json.playjson.PlayJsonJsonapiSupport._
import org.zalando.jsonapi.model.JsonApiObject.StringValue
import org.zalando.jsonapi.model.RootObject.ResourceObject
import org.zalando.jsonapi.model.{Attribute, RootObject}
import play.api.libs.json._
case class Person(id: String, name: String)
object Person {
implicit val personJsonapiRootObjectWriter: JsonapiRootObjectWriter[Person] = new JsonapiRootObjectWriter[Person] {
override def toJsonapi(person: Person) = {
RootObject(data = Some(ResourceObject(
`type` = "person",
id = Some(person.id.toString),
attributes = Some(List(
Attribute("name", StringValue(person.name))
)), links = None)
))
}
}
}
object main {
def main(args: Array[String]) {
val p = Person("asd3nbs32g5", "Tyler")
val j = Json.toJson(p.rootObject)
}
}
Error:
java.lang.NoSuchMethodError: play.api.libs.functional.syntax.package$.functionalCanBuildApplicative(Lplay/api/libs/functional/Applicative;)Lplay/api/libs/functional/FunctionalCanBuild;
at org.zalando.jsonapi.json.playjson.PlayJsonJsonapiFormat$class.rootObjectFormat(PlayJsonJsonapiFormat.scala:18)
at org.zalando.jsonapi.json.playjson.PlayJsonJsonapiSupport$.rootObjectFormat$lzycompute(PlayJsonJsonapiSupport.scala:19)
at org.zalando.jsonapi.json.playjson.PlayJsonJsonapiSupport$.rootObjectFormat(PlayJsonJsonapiSupport.scala:19)
at main$.main(main.scala:26)
at main.main(main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
It will work if I use spray instead of play.