要在Akka HTTP中使用POST路由JSON反序列化,可以按照以下步骤进行操作:
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-http" % "2.6.10",
"com.typesafe.akka" %% "akka-http-spray-json" % "10.2.0",
"com.typesafe.akka" %% "akka-actor-typed" % "2.6.10"
)
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
import akka.stream.ActorMaterializer
import spray.json.DefaultJsonProtocol._
case class User(name: String, age: Int)
object Server extends App {
implicit val system = ActorSystem("my-system")
implicit val materializer = ActorMaterializer()
implicit val executionContext = system.dispatcher
// JSON格式化器
implicit val userFormat = jsonFormat2(User)
val route =
path("user") {
post {
entity(as[User]) { user =>
complete(s"Received user: ${user.name}, ${user.age}")
}
}
}
val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)
println(s"Server online at http://localhost:8080/")
}
在此示例中,我们定义了一个名为User的case class,并导入了默认的JSON格式化器。然后,我们创建了一个路由路径“/user”,当收到POST请求时,会将请求的实体反序列化为User对象,并返回一个包含User信息的响应。
object Server extends App {
...
val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)
println(s"Server online at http://localhost:8080/")
// 等待服务器关闭
Await.result(system.whenTerminated, Duration.Inf)
}
这样,服务器就会在本地主机的8080端口上运行。
现在,您可以使用任何HTTP客户端向服务器发送POST请求,并将请求的JSON数据反序列化为User对象。