scala - Play Framework 找不到 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, params: Map[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)
推荐阅读
- c++ - 通过 emplace() 将对象指针插入地图地图不起作用
- stripe-payments - 何时从条带事件更新数据库中的订阅结束日期
- c - 如何在不暴露其类型的情况下暴露 C 结构大小?
- r - R:使用 POST() httr 从 Azure FaceRecognition 服务检索答案
- python - 为什么线性读-改组写入不比改组读-线性写快?
- r - 建立生命表
- ios - 支持 Swift 4.2 的 Cucumberish 的任何替代品?
- azure - 如何从发布管道/ARM 模板设置 Application Insights
- c# - 通过类的 SOAP 抽象不能正常工作?
- python - tensorflow python 3.7.2使用anaconda导入错误