gpt4 book ai didi

scala - 带有可选参数的路由 - Play 2.1 Scala

转载 作者:行者123 更新时间:2023-12-03 21:19:08 25 4
gpt4 key购买 nike

所以在 Play 2.0 中我有这个:

GET     /tasks/add              controllers.Tasks.addTask(parentId: Option[Long] = None)
GET /tasks/:parentId/add controllers.Tasks.addTask(parentId: Option[Long])

使用这样的 Controller 方法:
def addTask(parentId: Option[Long]) = Action { 
Ok(views.html.addTask(taskForm, parentId))
}

它正在工作。当我迁移到 2.1 时,它似乎提示这些行: No URL path binder found for type Option[Long]. Try to implement an implicit PathBindable for this type.基本上,我想要完成的是拥有路线 tasks/add和路线 tasks/123/add链接到接受 Optional[Long] 的同一方法.知道怎么做吗?谢谢。

好的,所以我得到了一种它不是错误,它是 Lighthouse 上的功能响应:“我们删除了路径可绑定(bind)中的 Option[Long] 支持,因为拥有可选路径参数没有意义。您可以实现自己的如果你愿意,可以支持它的路径可绑定(bind)。”到目前为止,我有 2 个解决方案,将 -1 作为 parentId 传递,我不太喜欢。或者有两种不同的方法,在这种情况下可能更有意义。现在实现 PathBindable 似乎不太可行,所以我可能会坚持使用 2 种方法。

最佳答案

支持 Play 2.0 Option在路径参数中,Play 2.1 不再支持这一点,他们删除了 PathBindable for Option。

一种可能的解决方案是:

package extensions
import play.api.mvc._
object Binders {
implicit def OptionBindable[T : PathBindable] = new PathBindable[Option[T]] {
def bind(key: String, value: String): Either[String, Option[T]] =
implicitly[PathBindable[T]].
bind(key, value).
fold(
left => Left(left),
right => Right(Some(right))
)

def unbind(key: String, value: Option[T]): String = value map (_.toString) getOrElse ""
}
}

并将其添加到 Build.scala使用 routesImport += "extensions.Binders._" .运行 play clean ~run它应该可以工作。动态重新加载活页夹有时才有效。

关于scala - 带有可选参数的路由 - Play 2.1 Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com