Like-Spray 对象编组
Akka-Spray object marshall
我正在试验 aka 和 spray,我想实现的是一个简单的对象编组服务。
当我尝试编译代码时出现以下错误:
Error:(33, 18) could not find implicit value for parameter marshaller:
spray.httpx.marshalling.Marshaller[ExampleApplication.Password]
marshal(Password(randomString(8),i,0))
^
代码如下:
import akka.actor.ActorSystem
import spray.http.HttpEntity
import spray.json.DefaultJsonProtocol
import spray.routing.SimpleRoutingApp
import spray.httpx.marshalling._
import spray.json._
object ExampleApplication extends App with SimpleRoutingApp {
implicit val actorSystem = ActorSystem()
implicit var i = 0;
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val PasswordFormat = jsonFormat3(Password)
}
case class Password(pass: String, count: Int, complexity: Int)
def newPass(cplx: Int):Password = {return Password(randomString(cplx),i,0)}
startServer(interface = "localhost", port = 8080) {
get {
path("passgen") {
i+=1
complete {
marshal(newPass(8))
}
}
}
}
def randomString(n: Int): String = {
n match {
case 1 => util.Random.nextPrintableChar().toString
case _ => util.Random.nextPrintableChar.toString ++ randomString(n - 1).toString
}
}
}
我还是不明白哪里出了问题。
两个更改来修复它:
import spray.httpx.SprayJsonSupport._
那么即使您在应用程序中正确定义了 JsonProtocol 对象,您仍然必须显式导入它的成员:
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val PasswordFormat = jsonFormat3(Password)
}
import MyJsonProtocol._
在这种情况下,这看起来有点重复,但在大多数用例中,您会在其他地方定义它。
可选
无需显式调用即可完成调用 marshal
:
complete {
newPass(8)
}
我正在试验 aka 和 spray,我想实现的是一个简单的对象编组服务。
当我尝试编译代码时出现以下错误:
Error:(33, 18) could not find implicit value for parameter marshaller: spray.httpx.marshalling.Marshaller[ExampleApplication.Password] marshal(Password(randomString(8),i,0)) ^
代码如下:
import akka.actor.ActorSystem
import spray.http.HttpEntity
import spray.json.DefaultJsonProtocol
import spray.routing.SimpleRoutingApp
import spray.httpx.marshalling._
import spray.json._
object ExampleApplication extends App with SimpleRoutingApp {
implicit val actorSystem = ActorSystem()
implicit var i = 0;
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val PasswordFormat = jsonFormat3(Password)
}
case class Password(pass: String, count: Int, complexity: Int)
def newPass(cplx: Int):Password = {return Password(randomString(cplx),i,0)}
startServer(interface = "localhost", port = 8080) {
get {
path("passgen") {
i+=1
complete {
marshal(newPass(8))
}
}
}
}
def randomString(n: Int): String = {
n match {
case 1 => util.Random.nextPrintableChar().toString
case _ => util.Random.nextPrintableChar.toString ++ randomString(n - 1).toString
}
}
}
我还是不明白哪里出了问题。
两个更改来修复它:
import spray.httpx.SprayJsonSupport._
那么即使您在应用程序中正确定义了 JsonProtocol 对象,您仍然必须显式导入它的成员:
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val PasswordFormat = jsonFormat3(Password)
}
import MyJsonProtocol._
在这种情况下,这看起来有点重复,但在大多数用例中,您会在其他地方定义它。
可选
无需显式调用即可完成调用 marshal
:
complete {
newPass(8)
}