§Scala 組態 API
Play 使用 Typesafe config 函式庫,但 Play 也提供一個名為 Configuration
的友善 Scala 封裝,它具有更進階的 Scala 功能。如果您不熟悉 Typesafe config,您可能也想閱讀 組態檔語法和功能 的文件。
§存取組態
通常,您會透過 依賴注入取得一個 Configuration
物件,或僅透過將 Configuration
的執行個體傳遞給您的元件
class MyController @Inject() (config: Configuration, c: ControllerComponents) extends AbstractController(c) {
def getFoo = Action {
Ok(config.get[String]("foo"))
}
}
get
方法是您最常使用的。這用於取得組態檔中路徑上的單一值。
// foo = bar
config.get[String]("foo")
// bar = 8
config.get[Int]("bar")
// baz = true
config.get[Boolean]("baz")
// listOfFoos = ["bar", "baz"]
config.get[Seq[String]]("listOfFoos")
它接受一個隱含的 ConfigLoader
,但對於大多數常見類型,例如 String
、Int
,甚至 Seq[String]
,已經定義了載入器,它們會執行您預期的動作。
Configuration
也支援針對一組有效值進行驗證
config.getAndValidate[String]("foo", Set("bar", "baz"))
§ConfigLoader
透過定義您自己的 ConfigLoader
,您可以輕鬆地將組態轉換為自訂類型。這在 Play 內部廣泛使用,並且是為您使用組態帶來更多類型安全的絕佳方式。例如
case class AppConfig(title: String, baseUri: URI)
object AppConfig {
implicit val configLoader: ConfigLoader[AppConfig] = new ConfigLoader[AppConfig] {
def load(rootConfig: Config, path: String): AppConfig = {
val config = rootConfig.getConfig(path)
AppConfig(
title = config.getString("title"),
baseUri = new URI(config.getString("baseUri"))
)
}
}
}
然後,您可以像上面那樣使用 config.get
// app.config = {
// title = "My App
// baseUri = "https://example.com/"
// }
config.get[AppConfig]("app.config")
§選用組態金鑰
Play 的 Configuration
支援使用 getOptional[A]
方法取得選用的組態金鑰。它的作用就像 get[A]
,但如果金鑰不存在,它會傳回 None
。我們建議您不要使用此方法,而是在組態檔中將選用金鑰設定為 null
,並使用 get[Option[A]]
。但我們提供此方法,以方便您在需要與以非標準方式使用組態的函式庫介接時使用。
下一步:HTTP 編程
在此文件檔中發現錯誤?此頁面的原始程式碼可以在 這裡 找到。在閱讀 文件檔指南 後,請隨時提出 pull request。有問題或建議想分享?請前往 我們的社群論壇 與社群展開對話。