2017-05-11 60 views
1

我是Play Framework的超級新手,剛開始我的第一次使用play-scala-rest-api-example。我將post包複製爲新的用戶包,將UserRouter添加到路由中,並將UserRepository附加到模塊配置中。Scala Play Framework 2.5.x中的索引路由

一切正常,只是在訪問/v1/users時出現404錯誤。只有/v1/users/有效。對於帖子既有和沒有斜槓最後調用索引路由。我沒有改變任何東西,只是重命名類和對象。就像我剛纔說的,我剛開始玩這個框架,可能它是一個超級微不足道的東西。

這裏的路徑文件:

GET  /     controllers.HomeController.index 

->   /v1/posts   api.post.PostRouter 
->   /v1/users   api.user.UserRouter 

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file  controllers.Assets.at(path="/public", file) 

`

+0

照打文檔「你可以告訴路由文件通過使用不同的路由器特定的前綴下‘ - >’,然後給定的前綴: - >」所以,你爲什麼使用 - >而不是簡單地重複GET/v1/posts GET/v1/etc? – rekiem87

+0

我希望錯誤在您的用戶路由器中。你注意存儲在那裏的前綴值嗎? –

+0

@OlivierSamyn,我剛剛複製了路由器。前綴是'/ v1/users',路由看起來是一樣的。 –

回答

1

我發現缺少的東西。因此對於使用this tutorial的任何其他人,並面臨同樣的問題。您必須將自定義前綴添加到app/RequestHandler.scalaisREST()方法中。所以handlerForRequest方法在結尾處自動添加尾部斜線。

private def isREST(request: RequestHeader) = { 
    request.uri match { 
     case uri: String if uri.contains("post") => true 
     case uri: String if uri.contains("user") => true 
     case _ => false 
    } 
} 

private def isREST(request: RequestHeader) = { 
    request.uri match { 
     case uri: String if uri.contains("post") | uri.contains("user") => true 
     case _ => false 
    } 
} 
0

你的文件應該是

GET  /     controllers.HomeController.index 

GET   /v1/posts   api.post.PostRouter 
GET   /v1/users   api.user.UserRouter 

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file  controllers.Assets.at(path="/public", file) 

- >符號是,可能你現在不需要一些特殊情況。 https://www.playframework.com/documentation/2.5.x/ScalaRouting

+0

我想在不同的路由器中分割我的路由。所以'PostRouter'和'UserRouter'接受多條路由。例如'GET /#index'' POST /#new'或'GET /:id#show'等我漫步如果我只能使用' - >'一次並且必須將路由器合併到一個文件中 –

相關問題