如何在Play自己的代码中使用状态

时间:2018-07-31 06:10:16

标签: scala playframework

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

扩展状态。

2 个答案:

答案 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) { ....}