我想在我的Play-scala项目中将java.sql.Date和Option [java.sql.Date]作为查询参数,这不是Play框架的默认设置。我正在使用的Play版本是2.4.3。我有以下(粗略)课程。
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"
但是如果我为一个例子定义一个带有Option [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
答案 0 :(得分:4)
因此,Build.scala并不是正确的地方......即使有些文件告诉它将它放在那里。在build.sbt中
routesImport += "binders.CustomBinders._"
该项目编译得很好。修正了Binder原帖中的一些错误。