【发布时间】:2017-11-29 06:06:13
【问题描述】:
我可以将自定义类型作为参数传递给方法并使用它从外部 API读取 JSON 吗?所以如果我有这个:
trait ApiInfo
case class SunInfoResults(sunrise: String, sunset: String, solar_noon: String, day_length: Long, civil_twilight_begin: String, civil_twilight_end: String, nautical_twilight_begin: String, nautical_twilight_end: String, astronomical_twilight_begin: String, astronomical_twilight_end: String)
case class SunInfo(results: SunInfoResults, status: String) extends ApiInfo
case class TvInfo(url: String, name: String, gender: String, culture: String, born: String, died: String, titles: Array[String], aliases: Array[String], father: String, mother: String, spouse: String, allegiances: Array[String], books: Array[String], povBooks: Array[String], tvSeries: Array[String], playedBy: Array[String]) extends ApiInfo
在对外部 API 进行服务调用之前,我需要声明一个隐式来序列化 JSON。那么我将如何指定需要映射到的类(使用JSON automated mapping in Play 2.5)?我确信这一定是可能的,因为 Scala 是建立在减少重复代码的概念之上的——如果没有这样的解决方案,我将不得不这样做。这是我在将任何自定义类型传递到时遇到的问题:
implicit val infoReads = Json.reads[p] // where p is SunInfo or TvInfo
只是在对类型主题进行了一些研究后也包括在内;我想知道我是否必须使用phantom types,因为该类在正确映射到 JSON 响应之前不会被实例化。
【问题讨论】:
标签: json scala playframework json-deserialization jsonreader