假设我有一个Scala的case class,它具备将其序列化为JSON的能力(使用json4s或其他库):
case class Weather(zip : String, temp : Double, isRaining : Boolean)
如果我正在使用一个HOCON配置文件:
allWeather {
BeverlyHills {
zip : 90210
temp : 75.0
isRaining : false
}
Cambridge {
zip : 10013
temp : 32.0
isRainging : true
}
}
有没有办法使用 typesafe config 自动实例化一个Weather
对象?
我在寻找以下形式的内容:
val config : Config = ConfigFactory.parseFile(new java.io.File("weather.conf"))
val bevHills : Weather = config.getObject("allWeather.BeverlyHills").as[Weather]
这个解决方案可以利用被引用的值 "allWeather.BeverlyHills"
是一个 JSON "blob" 的事实。
我显然可以编写自己的解析器:
def configToWeather(config : Config) =
Weather(config.getString("zip"),
config.getDouble("temp"),
config.getBoolean("isRaining"))
val bevHills = configToWeather(config.getConfig("allWeather.BeverlyHills"))
但这似乎不够优雅,因为对天气定义的任何更改都需要更改 configToWeather
。
提前感谢您的审阅和回复。
ConfigObjectSource
并将其传递给解析器函数以作为案例类加载;这样,单元测试等可以提供获取此对象的不同方式(从文件、URL、字符串或经典的堆栈application.conf/reference.conf/systemProperties
方法)。 - soMuchToLearnAndShare