如何从com.typesafe.config中读取自定义对象

时间:2018-04-03 19:24:02

标签: typesafe-config

参考com.typesafe.config库,我注意到虽然有可用于将值解析为IntegerBoolean等的方法,但没有可用于解析值的方法自定义对象。我是对的吗?

https://lightbend.github.io/config/latest/api/com/typesafe/config/Config.html

我想创建一个包含以下值的配置文件

cookieName: String = "id",
  cookiePath  = "/",
  cookieDomain = None,
  secureCookie  = true,
  httpOnlyCookie = true,
  useFingerprinting = true,
  cookieMaxAge  = None,
  authenticatorIdleTimeout = None,
  authenticatorExpiry: = 12 hours

并将其解析为案例类

case class CookieAuthenticatorSettings(
  cookieName: String ,
  cookiePath: String ,
  cookieDomain: Option[String] ,
  secureCookie: Boolean ,
  httpOnlyCookie: Boolean, 
  useFingerprinting: Boolean ,
  cookieMaxAge: Option[FiniteDuration] ,
  authenticatorIdleTimeout: Option[FiniteDuration] ,
  authenticatorExpiry: FiniteDuration 
)

我怎么能这样做?在下面的代码片段中,我看到一个方法'as'已被使用,但当我尝试在我的代码中使用它时,编译器找不到'as'方法。

val config = configuration.underlying.as[JcaSignerSettings]("silhouette.oauth1TokenSecretProvider.signer")

以上代码来自https://github.com/mohiva/play-silhouette-seed/blob/master/app/modules/SilhouetteModule.scala

2 个答案:

答案 0 :(得分:0)

您将需要使用this之类的东西来利用Scala implicit的用法。它的默认行为是,只要配置中的字段名称与case类中的对象匹配,就可以弄清楚所需的对象,但是您也可以提供自己的读取器以将config字段映射到case类。

我在自己的项目中使用了这个库,我可以说它按宣传的方式工作。

答案 1 :(得分:0)

签出https://github.com/kxbmap/configs

您可以做类似的事情

case class MyConfig(foo: String, bar: Int, baz: List[FiniteDuration])

val config = ConfigFactory.parseString("""
  my-config {
    foo = My config value
    bar = 123456
    baz = [1h, 2m, 3s]
  }
  """)

val result = config.get[MyConfig]("my-config")