Skip to content

Simple play-json example #65

Open
Open
@TylerPachal

Description

@TylerPachal

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions