Наличие пользовательского QueryStringBindable в области видимости с Play 2.4.3

Я хотел бы иметь java.sql.Date и Option[java.sql.Date] в моем проекте Play-scala в качестве параметра запроса, которые по умолчанию не входят в платформу 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-документация ничего не говорит о необходимости добавить их в Build.scala

1 ответ

Решение

Так что, по-видимому, Build.scala был неподходящим местом... Хотя в некоторых документах говорится, чтобы его туда поместили. Когда в build.sbt

routesImport += "binders.CustomBinders._"

Проект компилируется просто отлично. Исправлены некоторые ошибки в оригинальном посте для Binder.

Другие вопросы по тегам