Play 框架找不到 QueryStringBinders

如何解决Play 框架找不到 QueryStringBinders

我在模型包中有一个名为 CoordinatesTranslationDTO 的案例类:

case class CoordinatesTranslationDTO(locale: String,lat: BigDecimal,lng: BigDecimal)

我像这样在 QueryStringBinders 控制器中导入它:

import models.CoordinatesTranslationDTO

我在 QueryStringBinders 控制器中的对象实现如下所示:

object QueryStringBinders {
  implicit def coordinatesTranslationStringBinder(
                                                   implicit bigDecimalBinder: QueryStringBindable[BigDecimal],stringBinder: QueryStringBindable[String]
                                                 ): QueryStringBindable[CoordinatesTranslationDTO] =
    new QueryStringBindable[CoordinatesTranslationDTO] {
      private def subBind[T](key: String,subkey: String,params: Map[String,Seq[String]])
                            (implicit b: QueryStringBindable[T]): Either.RightProjection[String,Option[T]] = {
        b.bind(s"$key.$subkey",params).map(_.right.map(r => Option(r))).getorElse(Right(None)).right
      }

      override def bind(key: String,Seq[String]]): Option[Either[String,CoordinatesTranslationDTO]] = Some {
        def bnd[T](s: String)(implicit b: QueryStringBindable[T]) = subBind[T](key,s,params)

        for {
          locale <- bnd[String]("locale")
          lat <- bnd[BigDecimal]("lat")
          lng <- bnd[BigDecimal]("lng")
        } yield CoordinatesTranslationDTO(locale,lat,lng)
      }

      override def unbind(key: String,coordinates: CoordinatesTranslationDTO): String = {
        def ubnd[T](key: String,s: Option[T])(implicit b: QueryStringBindable[T]) = s.map(f => b.unbind(key,f))

        val keys = Seq(
          ubnd("lat",coordinates.lat),ubnd("lng",coordinates.lng),ubnd("locale",coordinates.locale)
        ).flatten
        keys.mkString("&")
      }
    }
}

我在路由文件中的路由如下所示:

GET           /people/translation                                                          controllers.PeopleController.getorCreatePersonLocation(p: models.CoordinatesTranslationDTO)

我已经运行了 sbt clean,设置了 cleanFiles,天知道还有多少命令。但似乎没有任何效果。我得到的只是:

[error] /Users/developmentuser/Desktop/Jobs/parent/solar/conf/routes:269:1: No QueryString binder found for type models.CoordinatesTranslationDTO. Try to implement an implicit QueryStringBindable for this type

解决方法

您至少忘记的一件事是在路由文件中添加参数。您路线中的 :p 参数。它应该与您传递给 getOrCreatePersonLocation 函数的相同。

GET   /people/translation/:p   controllers.PeopleController.getOrCreatePersonLocation(p: models.CoordinatesTranslationDTO)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?