如何解决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 举报,一经查实,本站将立刻删除。