Sim*_*mon 5 json scala playframework-2.2 playframework-json
我正在玩Play!斯卡拉2.2和我有渲染的一个问题class在Json:
我有两个类,一个依赖于另一个,如下所示:
case class Artist(id: String, cover: String, website: List[String], link: String, Tracks: List[Track] = List())
case class Track(stream_url: String, title: String, artwork_url: Option[String] )
Run Code Online (Sandbox Code Playgroud)
他们隐含的作家:
implicit val artistWrites: Writes[Artist] = Json.writes[Artist]
implicit val trackWrites: Writes[Track] = Json.writes[Track]
Run Code Online (Sandbox Code Playgroud)
作者的工作如下:
println(Json.toJson(Track("aaa", "aaa", Some("aaa"))))
println(Json.toJson(Artist("aaa", "aaa", List("aaa"), "aaa", List())))
Run Code Online (Sandbox Code Playgroud)
即如果Artist有一个空的 list of tracks.但如果我想这样做:
println(Json.toJson(Artist("aaa", "aaa", List("aaa"), "aaa", List(SoundCloudTrack("ljkjk", "ljklkj", Some("lkjljk"))))))
Run Code Online (Sandbox Code Playgroud)
我得到一个execution exception:[NullPointerException: null]
你能解释一下我做错了什么吗?谢谢 ;)
问题是初始化顺序.Json.writes[Artist]需要隐式Writes[Track]才能生成自己.编译器能够找到隐式的Writes[Track],因为你在同一个对象中声明它,但是 在之后trackWrites初始化,这意味着当被调用时,是.但是,这并不会中断创建,因此在实际使用之前它不会被注意到. artistWritesJson.writes[Artist]trackWritesnullartistWrites
你可以通过简单地切换初始化顺序来解决这个问题,这trackWrites是第一个.
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |