在 Play 2.4.3 的范围内有一个自定义的 QueryStringBindable
Having a custom QueryStringBindable in the scope with Play 2.4.3
我想在我的 Play-scala 项目中使用 java.sql.Date 和 Option[java.sql.Date] 作为查询参数,这不是 Play 框架的默认设置。我使用的播放版本是 2.4.3。我有以下(粗略)class.
object CustomBinders extends {
val dateFormat = ISODateTimeFormat.date()
implicit def dateBinder: QueryStringBindable[Date] = new QueryStringBindable[Date] {
def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, Date]] = {
val dateString: Option[Seq[String]] = params.get(key)
try {
Some(Right(new Date(dateFormat.parseDateTime(dateString.get.head).getMillis)))
} catch {
case e: IllegalArgumentException => Option(Left(dateString.get.head))
}
}
def unbind(key: String, value: Date): String = {
dateFormat.print(value.getTime)
}
}
}
然后在Build.scala我有
import play.sbt.routes.RoutesKeys
object Build extends Build {
RoutesKeys.routesImport += "binders.CustomBinders.dateBinder"
RoutesKeys.routesImport += "binders.CustomBinders.optionDateBinder"
但是,如果我使用选项 [Date] 定义查询参数作为示例,我会收到错误
No QueryString binder found for type Option[java.sql.Date]. Try to implement an implicit QueryStringBindable for this type.
所以这显然不是范围。我应该如何定义绑定器以便它们存在于范围内?我找不到这方面的 2.4 文档,但是 2.5-documentation 没有说明需要将它们添加到 Build.scala
所以显然 Build.scala 不是正确的位置...即使一些文档告诉将它放在那里。在 build.sbt
时
routesImport += "binders.CustomBinders._"
项目编译得很好。还为 Binder 修复了原始 post 中的一些错误。
我想在我的 Play-scala 项目中使用 java.sql.Date 和 Option[java.sql.Date] 作为查询参数,这不是 Play 框架的默认设置。我使用的播放版本是 2.4.3。我有以下(粗略)class.
object CustomBinders extends {
val dateFormat = ISODateTimeFormat.date()
implicit def dateBinder: QueryStringBindable[Date] = new QueryStringBindable[Date] {
def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, Date]] = {
val dateString: Option[Seq[String]] = params.get(key)
try {
Some(Right(new Date(dateFormat.parseDateTime(dateString.get.head).getMillis)))
} catch {
case e: IllegalArgumentException => Option(Left(dateString.get.head))
}
}
def unbind(key: String, value: Date): String = {
dateFormat.print(value.getTime)
}
}
}
然后在Build.scala我有
import play.sbt.routes.RoutesKeys
object Build extends Build {
RoutesKeys.routesImport += "binders.CustomBinders.dateBinder"
RoutesKeys.routesImport += "binders.CustomBinders.optionDateBinder"
但是,如果我使用选项 [Date] 定义查询参数作为示例,我会收到错误
No QueryString binder found for type Option[java.sql.Date]. Try to implement an implicit QueryStringBindable for this type.
所以这显然不是范围。我应该如何定义绑定器以便它们存在于范围内?我找不到这方面的 2.4 文档,但是 2.5-documentation 没有说明需要将它们添加到 Build.scala
所以显然 Build.scala 不是正确的位置...即使一些文档告诉将它放在那里。在 build.sbt
时routesImport += "binders.CustomBinders._"
项目编译得很好。还为 Binder 修复了原始 post 中的一些错误。