/ / json HttpEntityをスプレーjsonでアンマーシャリングできない - json、scala、unmarshalling、spray、spray-json

json HttpEntityをスプレーjsonでアンマーシャリングできない - json、scala、unmarshalling、spray、spray-json

私は単純な例を ドキュメンテーション 変更なし:

import spray.json.DefaultJsonProtocol
import spray.httpx.unmarshalling._
import spray.httpx.marshalling._
import spray.http._
import HttpCharsets._
import MediaTypes._

case class Person(name: String, firstName: String, age: Int)

object MyJsonProtocol extends DefaultJsonProtocol {
implicit val PersonFormat = jsonFormat3(Person)
}

import MyJsonProtocol._
import spray.httpx.SprayJsonSupport._
import spray.util._

val bob = Person("Bob", "Parr", 32)
val body = HttpEntity(
contentType = ContentType(`application/json`, `utf-8`),
string =
"""|{
|  "name": "Bob",
|  "firstName": "Parr",
|  "age": 32
|}""".stripMarginWithNewline("n")
)

marshal(bob)
body.as[Person]

最後の行( "body.as [Person]")で次のエラーとstacktraceで失敗します。

Exception in thread "main" java.lang.NoSuchMethodError: spray.json.JsonParser$.apply(Ljava/lang/String;)Lspray/json/JsValue;
at spray.httpx.SprayJsonSupport$$anonfun$sprayJsonUnmarshaller$1.applyOrElse(SprayJsonSupport.scala:36)
at spray.httpx.SprayJsonSupport$$anonfun$sprayJsonUnmarshaller$1.applyOrElse(SprayJsonSupport.scala:34)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
at spray.httpx.unmarshalling.Unmarshaller$$anon$1$$anonfun$unmarshal$1.apply(Unmarshaller.scala:29)
at spray.httpx.unmarshalling.SimpleUnmarshaller.protect(SimpleUnmarshaller.scala:40)
at spray.httpx.unmarshalling.Unmarshaller$$anon$1.unmarshal(Unmarshaller.scala:29)
at spray.httpx.unmarshalling.SimpleUnmarshaller.apply(SimpleUnmarshaller.scala:29)
at spray.httpx.unmarshalling.SimpleUnmarshaller.apply(SimpleUnmarshaller.scala:23)
at spray.httpx.unmarshalling.package$PimpedHttpEntity.as(package.scala:39)
at com.example.M1$.delayedEndpoint$com$example$M1$1(M1.scala:34)
at com.example.M1$delayedInit$body.apply(M1.scala:3)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.App$$anonfun$main$1.apply(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
at scala.App$class.main(App.scala:76)
at com.example.M1$.main(M1.scala:3)
at com.example.M1.main(M1.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:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

私のコードで何が間違っていますか?私の依存関係は以下の通りです(build.sbt)。

scalaVersion := "2.11.7"

libraryDependencies ++= Seq(
"io.spray" %% "spray-can" % "1.3.1",
"io.spray" %% "spray-routing" % "1.3.1",
"io.spray" %% "spray-json" % "1.3.2",
"com.typesafe.akka" %% "akka-actor" % "2.3.11"
)

私は バグ スプレーhttpxとスプレーjsonの間の非互換性に関連していますが、既に解決されているようです。私はすべてのライブラリの最新の安定版を使用しています。

他に何が間違っていますか?

回答:

回答№1は6

スプレーhttpとスプレーjsonの間のバージョンの非互換性の問題のように見えますが、これらの特定のバージョンは問題なく正常に動作します。

libraryDependencies ++= Seq(
"io.spray" %% "spray-can" % "1.3.3",
"io.spray" %% "spray-routing" % "1.3.3",
"io.spray" %% "spray-json" % "1.3.2",
"com.typesafe.akka" %% "akka-actor" % "2.3.11"
)