我一直在玩Play!框架为斯卡拉现在将近一年.我目前正在使用2.5.x版.
我知道Play中控制器的发展以及开发人员如何被迫远离静态object
路由.
我也知道Guice在游戏中的用法.
如果您下载激活器并运行:
activator new my-test-app play-scala
Run Code Online (Sandbox Code Playgroud)
Activator将为您生成模板项目.我的问题是围绕该模板的这个文件.
我的测试,应用程序/应用程序/服务/ Counter.scala
package services
import java.util.concurrent.atomic.AtomicInteger
import javax.inject._
/**
* This trait demonstrates how to create a component that is injected
* into a controller. The trait represents a counter that returns a
* incremented number each time it is called.
*/
trait Counter {
def nextCount(): Int
}
/**
* This class is a …
Run Code Online (Sandbox Code Playgroud) 上下文
我有一个案例类,它是层次结构中的一个项目,它引用自己是这样的:
case class Node(
name: String,
children: Option[Seq[Node]] = None
)
Run Code Online (Sandbox Code Playgroud)
我想要一个PlayJson Format
.
通常,您可以这样做:
implicit lazy val formatter = Json.format[MyCaseClass]
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
为什么?
PlayJson使用Scala宏Format
为case类生成一个,它将遍历所有字段,当它到达字段时children
,它将查找Node
尚未构造的现有格式化程序,以编译错误结束:
No implicit format for Option[Seq[Node]] available.
[error] implicit lazy val formatter = Json.format[Node]
Run Code Online (Sandbox Code Playgroud)
问题
什么是最好的方法来解决这个问题?
这是PlayJson格式宏的已知问题吗?