使用播放2.0.1我定义了以下路线:
GET /demo/list controllers.Demos.listDemos(page: Int ?= 0, orderBy: Int ?= 1, nameFilter: String ?= "", versionFilter: Long ?= -1, tagFilter: List[String] ?= Nil)
但我得到的编译此错误:
No QueryString binder found for type List[String]. Try to implement an implicit QueryStringBindable for this type.
我发现从播放2.1-RC(没有正式发布至今)的代码,这将解决这一问题:
/**
* QueryString binder for List
*/
implicit def bindableList[T: QueryStringBindable] = new QueryStringBindable[List[T]] {
def bind(key: String, params: Map[String, Seq[String]]) = Some(Right(bindList[T](key, params)))
def unbind(key: String, values: List[T]) = unbindList(key, values)
}
/**
* QueryString binder for java.util.List
*/
implicit def bindableJavaList[T: QueryStringBindable] = new QueryStringBindable[java.util.List[T]] {
def bind(key: String, params: Map[String, Seq[String]]) = Some(Right(bindList[T](key, params).asJava))
def unbind(key: String, values: java.util.List[T]) = unbindList(key, values.asScala)
}
private def bindList[T: QueryStringBindable](key: String, params: Map[String, Seq[String]]): List[T] = {
for {
values <- params.get(key).toList
rawValue <- values
bound <- implicitly[QueryStringBindable[T]].bind(key, Map(key -> Seq(rawValue)))
value <- bound.right.toOption
} yield value
}
private def unbindList[T: QueryStringBindable](key: String, values: Iterable[T]): String = {
(for (value <- values) yield {
implicitly[QueryStringBindable[T]].unbind(key, value)
}).mkString("&")
}
但几个小时后尝试,播放仍然没有找到的代码。 我使用自定义对象和隐式转换到该对象试过了,但它仍然无法正常工作。
我怎么能强制播放做隐式转换?
更新
我想避免2.1-SNAPSHOT如果可能的话,我很担心它的稳定性,但如果没有其他办法,我将使用它。 我试图从4E6的解决方案,但它没有工作:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: org.slf4j#slf4j-api;1.6.1: configuration not found in org.slf4j#slf4j-api;1.6.1: 'compile'. It was required from org.hibernate#hibernate-validator;4.2.0.Final compile
[warn] :: commons-codec#commons-codec;1.4: configuration not found in commons-codec#commons-codec;1.4: 'compile'. It was required from org.apache.httpcomponents#httpclient;4.1.2 compile
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
我SBT插件包含此:
// Comment to get more information during initialization
logLevel := Level.Warn
// The Typesafe repository
resolvers ++= Seq(
Resolver.url("Typesafe Ivy Snapshots", url("http://repo.typesafe.com/typesafe/ivy-snapshots/"))(Resolver.ivyStylePatterns),
"Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases/",
"Typesafe Snapshots" at "http://repo.typesafe.com/typesafe/snapshots/",
"DefaultMavenRepository" at "http://repo1.maven.org/maven2/",
"JavaNet1Repository" at "http://download.java.net/maven/1/")
// Use the Play sbt plugin for Play projects
addSbtPlugin("play" % "sbt-plugin" % "2.1-SNAPSHOT")