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

How to use Status in own code in Play

播放版本为 2.6.12。

我想在我自己的代码中使用 Results.Status,例如

   // in my code somewhere
   def doSomething(status:Results.Status) { ....} 

   // in controller
   doSomething(Ok)   <---- results in error

但是我在controller里面的Ok好像不是Results.Status

类型
[error] found : MyController.this.Status
[error] required: play.api.mvc.Results.Status

关于如何在我自己的控制器外部代码中使用 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

扩展状态。

您始终可以显式传递请求的类型:

doSomething(play.api.mvc.Results.Ok)

我想如果你只是在你的控制器中导入play.api.mvc.Results._,你会发生导入冲突(你仍然可以尝试),但只是导入play.api.mvc.Results,然后像这样使用它

doSomething(Results.Ok)

应该可以。

[error] found : MyController.this.Status
[error] required: play.api.mvc.Results.Status

状态是一种取决于控制器的特定类型。要拥有某种类型的函数,它不关心父类型,您可以像这样使用 # 符号:

def doSomething(status:Results#Status) { ....}