Akka HTTP 是一个基于 Akka Streams 的高性能、异步、非阻塞的 HTTP 服务器和客户端库。它允许你以声明式的方式定义路由和处理 HTTP 请求。JSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。
适用于需要处理大量并发请求的 Web 服务,特别是那些需要接收和发送 JSON 数据的场景。
以下是一个简单的示例,展示如何使用 Akka HTTP 读取 JSON 请求正文并将其作为 JSON 数组响应。
首先,确保在你的 build.sbt
文件中添加 Akka HTTP 和相关依赖:
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-http" % "10.2.4",
"com.typesafe.akka" %% "akka-stream" % "2.6.14",
"com.typesafe.akka" %% "akka-actor-typed" % "2.6.14",
"com.typesafe.akka" %% "akka-http-spray-json" % "10.2.4",
"io.spray" %% "spray-json" % "1.3.6"
)
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import spray.json._
object AkkaHttpJsonExample extends DefaultJsonProtocol {
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
implicit val executionContext = system.dispatcher
case class InputData(name: String, age: Int)
implicit val inputDataFormat = jsonFormat2(InputData)
val route =
path("api") {
post {
entity(as[InputData]) { data =>
complete {
// 处理输入数据并生成响应
val responseData = Seq(data).toJson
HttpResponse(entity = HttpEntity(ContentTypes.`application/json`, responseData.toString()))
}
}
}
}
def main(args: Array[String]): Unit = {
val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)
println(s"Server online at http://localhost:8080/")
}
}
build.sbt
中添加 Akka HTTP 和 Spray JSON 的依赖。InputData
类来表示 JSON 请求正文的数据结构,并为其生成 JSON 格式化器。InputData
对象。通过上述步骤,你可以轻松地从 Akka HTTP POST 请求中读取 JSON 正文,并将最终响应作为 JSON 数组发送。
领取专属 10元无门槛券
手把手带您无忧上云