как прочитать пользовательский объект из com.typesafe.config

Ссылаясь на библиотеку com.typesafe.config, я заметил, что, хотя есть методы для анализа значения на Integer, Boolean и т. д., нет доступных методов для анализа значения как пользовательского объекта. Я прав?

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

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


person Manu Chadha    schedule 03.04.2018    source источник


Ответы (2)


вам нужно будет использовать что-то вроде это, которое использует использование Scala implicits. у него есть поведение по умолчанию, которое определяет, какой объект вам нужен, если имена полей в конфигурации совпадают с именами в вашем классе case, но вы также можете предоставить свой собственный ридер для сопоставления полей конфигурации с вашим классом case.

Я использую эту библиотеку в своих проектах и ​​могу сказать, что она работает так, как рекламируется.

person Dexter Legaspi    schedule 13.07.2018
comment
Спасибо. Проверю. Это может занять некоторое время, поэтому на данный момент я временно приму ваш ответ. - person Manu Chadha; 15.07.2018

Проверьте 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")
person javascala    schedule 13.11.2018