у нас был запросStringBindable, который нам нужно использовать и имел подобную ситуацию, мы нашли этот вопрос, который дал нам ключ, но ответ от colinjwebb устарел.
Вот наш пример, который идет от строки к опции [LoginContext].
package controllers
import play.api.mvc.{Action, AnyContent, QueryStringBindable, Request}
...
object BindableLoginContext {
implicit def queryStringBindable(implicit stringBinder: QueryStringBindable[String]) = new QueryStringBindable[LoginContext] {
override def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, LoginContext]] =
for {
loginContextString <- stringBinder.bind(key, params)
} yield {
loginContextString match {
case Right(value) if value.toLowerCase == "web" => Right(LoginContexts.Web)
case Right(value) if value.toLowerCase == "api" => Right(LoginContexts.Api)
case _ => Left(s"Unable to bind a loginContext from $key")
}
}
override def unbind(key: String, loginContext: LoginContext): String = stringBinder.unbind(key, loginContext.toString)
}
}
Чтобы использовать его, нам необходимо использовать следующий импорт:
import play.sbt.routes.RoutesKeys
, а затем добавить объект в проект, как этот
lazy val microservice = Project(appName, file("."))
.settings(
RoutesKeys.routesImport += "controllers.BindableLoginContext._"
)
Я знал, что будет что-то вроде этого! Спасибо и с новым годом:] –
для того, чтобы получить ключ 'routesImport', мне пришлось импортировать' play.sbt.routes.RoutesKeys.routesImport' –