我希望能够拥有这个:
POST /items controllers.Application.update()
POST /items/:itemType controllers.Application.update(itemType: String)
POST /items/:itemType/:id controllers.Application.update(itemType: String, id: Int)
但由于method update is defined twice
的错误而无法编译。然后我改变它,它也没有编译:
POST /items controllers.Application.update(itemType: Option[String] = None, id: Option[Int] = None)
POST /items/:itemType controllers.Application.update(itemType: String, id: Option[Int] = None)
POST /items/:itemType/:id controllers.Application.update(itemType: String, id: Int)
错误是:
type mismatch; found: Option[String]; required: String
我该怎么办?我不会喜欢这样做:
POST /items controllers.Application.updateAll()
POST /items/:itemType controllers.Application.updateByType(itemType: String)
POST /items/:itemType/:id controllers.Application.updateByTypeAndId(itemType: String, id: Int)
并且不看起来很好,因为我想使用Option
而不是空字符串:
POST /items controllers.Application.update(itemType: String = "", id: Int = "")
POST /items/:itemType/:id controllers.Application.update(itemType: String, id: Int = "")
POST /items/:itemType/:id controllers.Application.update(itemType: String, id: Int)
答案 0 :(得分:1)
不幸的是,似乎在v2中删除了对Option的支持 - 例如,请参阅here - 因此您可能会遇到编写自己的PathBindable
代码来处理选项(如上面链接中所述),或者你注意到的其他一些令人讨厌的选择。
答案 1 :(得分:1)
如果您能够更改网址格式,则可以使用选项。
路线:POST /items controllers.Application.update(itemType: Option[String], id: Option[Int])
网址:http://localhost:9000/items?itemType=someItem&id=123
使用此格式,您可以在进行Web服务调用时省略itemType,id或两者。