2017-06-21 85 views
1

路徑或查詢我有一個階Enumeration如下:綁定枚舉在玩

object SearchTypes extends Enumeration { 
    type TypeAlias = Value 
    val firstVal, secondVal, thirdVal = Value 
} 

我希望能夠通過查詢字符串傳遞給它 - 我routes看起來像

/search @searchController.search(searchType: SearchTypes.TypeAlias) 

試圖運行播放應用程序時,會拋出一系列錯誤,包括:

[error]/Users/my-user/co de/project/conf/routes:8:找不到類型爲SearchTypes.TypeAlias的QueryString聯編程序。嘗試爲此類型實現隱式QueryStringBindable。

我該如何教玩法解析Enumeration

回答

1

有一個很好的深入寫了here,但關鍵是要落實QueryStringBindable.ParsingEnumeration內。例如:

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