我有一个scala Enumeration
如下:
object SearchTypes extends Enumeration {
type TypeAlias = Value
val firstVal, secondVal, thirdVal = Value
}
我希望能够通过查询字符串传递它 - 我的routes
看起来像
/search @searchController.search(searchType: SearchTypes.TypeAlias)
尝试运行播放应用程序时,会抛出一系列错误,包括:
[error] / Users / my-user / code / project / conf / routes:8:找不到类型为SearchTypes.TypeAlias的QueryString绑定器。尝试为此类型实现隐式QueryStringBindable。
如何教游戏来解析Enumeration
?
答案 0 :(得分:2)
有一个很好的深入撰写here,但关键是要在QueryStringBindable.Parsing
中实施Enumeration
。例如:
object SearchTypes extends Enumeration {
// other declarations
implicit object searchTypeQueryStringBinder
extends QueryStringBindable.Parsing[SearchTypes.TypeAlias](
withName(_),
_.toString,
(k: String, e: Exception) => "Cannot parse %s as SearchTypes: %s".format(k, e.getMessage())
)
}
(您可以通过用更复杂的东西替换对withName(_)
的直接调用来编写更复杂的基于案例的解析逻辑。)
执行此操作后,routes
应该得到满足,因为play
可以在string
和您的Enumeration
之间进行转换。
请注意,如果您想直接在路径中使用Enumeration
- 而不是在查询字符串中使用 - 那么您需要扩展PathBindable.Parsing
而不是QueryStringBindable.Parsing
。< / p>