在 Play Framework 项目中,我有用于处理 REST 请求的控制器,例如:
object AddressBean extends Controller with RestTrait{
def list = Action {
val list = Addresses.findAll()
Ok(Json.toJson(list.map(s => Json.toJson(s)(AddressJson.addressWrites))))
}
def create = Action {
Ok("")
}
}
(请注意,我只是把 OK("") 编译,我必须实现它们,就像我实现列表方法一样)。
我想为所有这些 REST 类定义一个特征以实现相同的方法,我开始喜欢:
/**
* Define an interface for all of our REST classes.
*/
trait RestTrait extends Controller{
/**
* List entities.
*/
def list
/**
* Create entity. Get entity from request.body
*/
def create
//and so on
}
问题是我收到一条警告说Unit does not take parameters
,所以我明白我的 trait 方法应该有一个 Action 返回类型,所以我最终将它们定义为:
/**
* Define an interface for all of our REST classes.
*/
trait RestTrait extends Controller{
/**
* List entities.
*/
def list = Action{
Ok("")
}
/**
* Create entity. Get entity from request.body
*/
def create = Action{
Ok("")
}
//and so on
}
有没有办法避免像这样在 trait 中定义方法?因为那时我必须override
在我的课堂上使用。implement
我主要不想override
那些方法......