Ich versuche, Nutzlast als String abzumelden, aber aus irgendeinem Grund schlägt es fehl. Mein Code:Wie man Akka HTTP Request Entity als String unmarshall?
path("mypath") {
post {
decodeRequest {
entity(as[String]) {jsonStr => //could not find implicit value for...FromRequestUnmarshaller[String]
complete {
val json: JsObject = Json.parse(jsonStr).as[JsObject]
val jsObjectFuture: Future[JsObject] = MyDatabase.addListItem(json)
jsObjectFuture.map(_.as[String])
}
}
}
}
}
In diesem SO thread zum Beispiel, es zu sein scheint, dass diese implizite standardmäßig verfügbar sein sollte. Aber vielleicht ist das bei akka-http anders?
Ich habe versucht, akka.http.scaladsl.unmarshalling.PredefinedFromEntityUnmarshallers
zu importieren, die eine stringUnmarshaller
hat, aber es hilft nicht. Vielleicht, weil dieser Typ FromEntityUnmarshaller[String]
nicht FromRequestUnmarshaller[String]
zurückgibt. Es gibt auch einen String-Unmarshaller in spray.httpx.unmarshalling.BasicUnmarshallers
, aber das hilft auch nicht, weder akka.http.scaladsl.unmarshalling.PredefinedFromStringUnmarshallers
Wie kann ich marshall (und marshall) in eine Zeichenfolge?
(Bonus: Wie man direkt in einem JsObject abmarshall (play json). Aber auch nur String, da ich daran interessiert bin, warum das nicht funktioniert und es kann für andere Fälle nützlich sein).
Mit 1.0-RC3
Dank.
Danke! Mein Problem war, dass ich den ActorFlowMaterializer implizit unterhalb der Routen-Definition deklarierte ... es ist ziemlich schwer zu erkennen, dass dies der Grund dafür ist, dass der Marshalling-Teil nicht kompiliert wird, für einen Neuling wie mich einfach unmöglich ... – Ixx
Außerdem muss ich haben verpasst, dass diese Reihenfolge wichtig ist, wenn sie Implikationen oder etwas anderes deklariert, weil die Variablen in Reichweite waren - gerade unterhalb der Routen. – Ixx
Danke auch für den jsons-unmarshaller, ich benutze tatsächlich string, nicht byteString (das war nur ein Test), aber könnte es leicht anpassen, mit string zu arbeiten. – Ixx