为什么我的路由无法识别我的协议
Why does my route not recognize my protocol
我在尝试为我的案例 classes 编写 jsonProtocol 时注意到嵌套案例 classes 出现错误。然而,如果我将案例 class 解耦并只创建一个包含所有字段的巨大案例 class,它将正常工作。
case class Invited(invited:Array[Int])
case class Event(eventName:String,eventID:Int,invited: Invited)
object jsonProtocol extends DefaultJsonProtocol {
implicit val invitedFormat = jsonFormat(Invited,"people Invited")
implicit val eventFormat = jsonFormat3(Event)
}
object WebServer {
def main(args:Array[String]): Unit ={
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
implicit val dispatcher = system.dispatcher
//println(Event("HelloEvent",2,Array(1,2,3)).toString)
val route = {
import jsonProtocol._
path("Event") {
post{
entity(as[Event]) {event =>
println(event.eventName)
complete(event)
}
}
}
}
val bindingFuture = Http().bindAndHandle(route,"localhost",8080)
StdIn.readLine() // let it run until user presses return
bindingFuture
.flatMap(_.unbind()) // trigger unbinding from the port
.onComplete(_ => system.terminate()) // and shutdown when done
}
}
带有 complete(event)
的行给我一个错误,指出预期 ToResponseMarshallable
,实际事件。
要修复将 spray json 与 akka http 结合使用时的编组错误,您需要将 SprayJsonSupport
混合到您的 jsonProtocol
对象中。
所以只需添加导入:
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
并更改行:
object jsonProtocol extends DefaultJsonProtocol {
至:
object jsonProtocol extends DefaultJsonProtocol with SprayJsonSupport {
PS 根据scalastyle,你应该用^[A-Z][A-Za-z]*
命名对象,所以在jsonProtocol
中首字母应该大写
我在尝试为我的案例 classes 编写 jsonProtocol 时注意到嵌套案例 classes 出现错误。然而,如果我将案例 class 解耦并只创建一个包含所有字段的巨大案例 class,它将正常工作。
case class Invited(invited:Array[Int])
case class Event(eventName:String,eventID:Int,invited: Invited)
object jsonProtocol extends DefaultJsonProtocol {
implicit val invitedFormat = jsonFormat(Invited,"people Invited")
implicit val eventFormat = jsonFormat3(Event)
}
object WebServer {
def main(args:Array[String]): Unit ={
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
implicit val dispatcher = system.dispatcher
//println(Event("HelloEvent",2,Array(1,2,3)).toString)
val route = {
import jsonProtocol._
path("Event") {
post{
entity(as[Event]) {event =>
println(event.eventName)
complete(event)
}
}
}
}
val bindingFuture = Http().bindAndHandle(route,"localhost",8080)
StdIn.readLine() // let it run until user presses return
bindingFuture
.flatMap(_.unbind()) // trigger unbinding from the port
.onComplete(_ => system.terminate()) // and shutdown when done
}
}
带有 complete(event)
的行给我一个错误,指出预期 ToResponseMarshallable
,实际事件。
要修复将 spray json 与 akka http 结合使用时的编组错误,您需要将 SprayJsonSupport
混合到您的 jsonProtocol
对象中。
所以只需添加导入:
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
并更改行:
object jsonProtocol extends DefaultJsonProtocol {
至:
object jsonProtocol extends DefaultJsonProtocol with SprayJsonSupport {
PS 根据scalastyle,你应该用^[A-Z][A-Za-z]*
命名对象,所以在jsonProtocol