3

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

Однако если задать запрос-параметр с помощью опции [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

ответ

3

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

routesImport += "binders.CustomBinders._" 

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

Смежные вопросы