我无法让以下工作,所以不知道它是否可能:
case class ItemA(name:String,itemB:ItemB)
case class ItemB(name:String)
object ToJson{
implicit val itemAJson = Json.format[ItemA]
implicit val itemBJson = Json.format[ItemB]
}
我收到类似的编译错误:
ItemB没有隐式格式可用。 [error]隐式val itemAJson = Json.format [ItemA]
很确定它无法完成,但有一种合理的方法吗?
Play Framework 2.3
答案 0 :(得分:2)
由于你的ItemA依赖于ItemB所以为了创建json.Format [ItemA]必须首先定义json.Forma [ItemB],因此更改顺序首先定义itemBJson然后itemAJson
implicit val itemBJson = Json.format[ItemB]
implicit val itemAJson = Json.format[ItemA]
答案 1 :(得分:0)
另一个选择是 lazy (隐式变量)...这样,它不会影响您编写它的顺序。我有很多jsonFormat,它们都可以像这样正常工作:
object ToJson {
implicit lazy val itemAJson = Json.format[ItemA]
implicit lazy val itemBJson = Json.format[ItemB]
}
类似的是Play documentation中的解决方案。递归类型。