Playversion是2.6.12。
我想在自己的代码中使用Results.Status
// in my code somewhere
def doSomething(status:Results.Status) { ....}
// in controller
doSomething(Ok) <---- results in error
但是我控制器内部的Ok似乎不是Results.Status类型的
[error] found : MyController.this.Status
[error] required: play.api.mvc.Results.Status
有什么想法如何在控制器外部的我自己的代码中使用状态?
助手代码是
import org.scalactic.{Bad, Good, Or}
import play.api.libs.json.Json
import play.api.mvc.Result
import play.api.mvc.Results.Status
object Helper {
def toResult[T](r:Or[T, Result], s:Status):Result = {
r match {
case Good(entity) => s(Json.toJson(entity))
case Bad(badRequest) => badRequest
}
}
}
控制器代码定义正在扩展
class AuthBaseController @Inject()(acc: AuthControllerComponents) extends BaseController with AuthRequestMarkerContext {
BaseController指向的位置
trait ControllerHelpers extends Results with HttpProtocol with Status with HeaderNames with ContentTypes with RequestExtractors with Rendering with RequestImplicits
扩展状态。
答案 0 :(得分:1)
您始终可以显式传递所请求的类型:
doSomething(play.api.mvc.Results.Ok)
我想如果您仅在控制器中导入play.api.mvc.Results._
,就会遇到导入冲突(您仍然可以尝试),但是仅导入play.api.mvc.Results
,然后像这样使用它
doSomething(Results.Ok)
应该工作。
答案 1 :(得分:0)
[error] found : MyController.this.Status
[error] required: play.api.mvc.Results.Status
状态是取决于控制器的特定类型。要拥有某种类型的函数,而不必关心父类型,可以使用#符号,如下所示:
def doSomething(status:Results#Status) { ....}