你可以在一行中要求整个工具包
//> using toolkit latest
或者,你只需要求 sttp 的特定版本
//> using dep com.softwaremill.sttp.client4::core:4.0.0-M1
在你的 build.sbt 文件中,你可以添加对工具包的依赖
lazy val example = project.in(file("example"))
.settings(
scalaVersion := "3.2.2",
libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
)
或者,你只需要求 sttp 的特定版本
libraryDependencies += "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M1"
在你的 build.sc 文件中,你可以添加对工具包的依赖
object example extends ScalaModule {
def scalaVersion = "3.2.2"
def ivyDeps =
Agg(
ivy"org.scala-lang::toolkit:0.1.7"
)
}
或者,你只需要求 sttp 的特定版本
ivy"com.softwaremill.sttp.client4::core:4.0.0-M1"
HTTP 和 JSON
JSON 是 HTTP 请求和响应正文的常见格式。
在下面的示例中,我们使用 GitHub REST API。你需要一个秘密 GitHub 身份验证令牌 来运行程序。不要与任何人分享你的令牌。
发送和接收 JSON
为了发送 JSON 请求并解析 JSON 响应,我们将 sttp 与 uJson 结合使用。
发送 JSON
要发送 JSON,你可以构造一个 uJson.Value
并将其作为请求正文中的字符串写入。
在以下示例中,我们使用 GitHub 用户端点 来更新经过身份验证的用户的个人资料。我们在 JSON 对象中提供了个人资料的新位置和简介。
import sttp.client4.quick._
val json = ujson.Obj(
"location" -> "hometown",
"bio" -> "Scala programmer"
)
val response = quickRequest
.patch(uri"https://api.github.com/user")
.auth.bearer(sys.env("GITHUB_TOKEN"))
.header("Content-Type", "application/json")
.body(ujson.write(json))
.send()
println(response.code)
// prints: 200
println(response.body)
// prints the full updated profile in JSON
import sttp.client4.quick.*
val json = ujson.Obj(
"location" -> "hometown",
"bio" -> "Scala programmer"
)
val response = quickRequest
.patch(uri"https://api.github.com/user")
.auth.bearer(sys.env("GITHUB_TOKEN"))
.header("Content-Type", "application/json")
.body(ujson.write(json))
.send()
println(response.code)
// prints: 200
println(response.body)
// prints the full updated profile in JSON
在运行程序之前,设置 GITHUB_TOKEN
环境变量。运行它之后,你应该在 GitHub 个人资料上看到你的新简介和位置。
从响应中解析 JSON
要从请求的响应中解析 JSON,你可以使用 ujson.read
。
我们再次使用 GitHub 用户端点,这次是为了获取经过身份验证的用户。
import sttp.client4.quick._
val response = quickRequest
.get(uri"https://api.github.com/user")
.auth.bearer(sys.env("GITHUB_TOKEN"))
.send()
val json = ujson.read(response.body)
println(json("login").str)
// prints your login
import sttp.client4.quick.*
val response = quickRequest
.get(uri"https://api.github.com/user")
.auth.bearer(sys.env("GITHUB_TOKEN"))
.send()
val json = ujson.read(response.body)
println(json("login").str)
// prints your login
在运行程序之前,设置 GITHUB_TOKEN
环境变量。运行程序应该会打印你自己的登录名。
使用 JSON 发送和接收 Scala 对象
或者,你可以使用 uPickle 使用 JSON 发送或接收 Scala 对象。阅读以下内容以了解 如何将对象序列化为 JSON 和 如何将 JSON 反序列化为对象。