为接收不同参数的2种方法配置相同的路径路径

时间:2014-03-26 17:22:52

标签: scala playframework playframework-2.0 scala-2.10

我有一个控制器,它有一些功能。

我的问题是我希望这样做:

GET     /v1.0/products          @controllers.ProductController.getProductsByCategory(lang: String ?="en_US", t:String, cat:String, start: Int ?=0, maxresults:Int ?=100, sort:String  ?="rank", order:String ?="asc")  
GET     /v1.0/products          @controllers.ProductController.getProducts(lang: String ?="en_US", t: String, ids: String)

我在控制器中有2个功能:

def getProducts(lang: String, t: String, ids: String) = Action { ... code.. }

def getProductsByCategory(lang: String, t: String, cat:String, start: Int, maxResults:Int, sort:String, order:String) = Action { ... Code ...}

这不起作用。我必须像这样定义路线:

GET     /v1.0/products/bycategory           @controllers.ProductController.getProductsByCategory(lang: String ?="en_US", t:String, cat:String, start: Int ?=0, maxresults:Int ?=100, sort:String  ?="rank", order:String ?="asc")  
GET     /v1.0/products          @controllers.ProductController.getProducts(lang: String ?="en_US", t: String, ids: String)

如果没有在路径中添加“bycategory”,有没有办法实现这一目标?

由于

2 个答案:

答案 0 :(得分:3)

你不能使用两条路径相同的路径(Haris,已经写过了),但你可以更好地使用路由器,我用的就是(伪代码) )

GET /products                 getAllProducts()
GET /products/:catId          getProductsByCat(catId)
GET /products/:catId/:id      getSingleProductWithinCat(catId, id)

所以你有/products> /products/toys> /products/toys/rc-plane

当然你仍然可以添加你的可选参数:

GET /products/toys?start=10&maxresults=250

请注意,这些是GET个路线=并且普通用户会尝试手动修改以加强搜索,这是正常的,所以如果/products/toys/rc-plane不能满足他,他会先尝试再次升级到/products/toys

答案 1 :(得分:2)

实现此目的的一种方法是使用一种方法来获取产品,例如

GET     /v1.0/products          @controllers.ProductController.getProducts(lang: String ?="en_US", t:String, cat:String ?= "", start: Int ?=0, maxresults:Int ?=100, sort:String  ?="rank", order:String ?="asc")

您可以在其中设置默认类别为none / null。如果您需要所有产品,请将其保留为默认值,例如

http://myhost/v1.0/products

如果您需要类别

http://myhost/v1.0/products?category=hotsauces