【问题标题】:Routes overloading doesn't work路由重载不起作用
【发布时间】:2013-10-11 03:13:00
【问题描述】:

我希望能够拥有这个:

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)

错误是:

  1. 上一个
  2. 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)

【问题讨论】:

    标签: scala playframework-2.1 playframework-2.2


    【解决方案1】:

    不幸的是,似乎在 v2 中删除了对 Option 的支持 - 例如,请参见 here - 因此您可能会被困在自己编写 PathBindable 来处理选项(如上面的链接中所述),或者其中之一您注意到的其他令人不快的选择。

    【讨论】:

    • 我可以将参数从url转换为某种类型吗? (itemType: MyClass1, id: MyClass2)
    • 对不起,我自己从来没有调查过,所以我不能说。
    【解决方案2】:

    如果您能够更改 URL 格式,则可以使用 Option。

    路线:POST /items controllers.Application.update(itemType: Option[String], id: Option[Int])

    网址:http://localhost:9000/items?itemType=someItem&id=123

    使用这种格式,您可以在调用 Web 服务时省略 itemType、id 或两者。

    【讨论】:

    • 我希望有“/”而不是“?”。
    • 我明白了。这样就干净多了。我想提供该选项,以防您(或其他人在未来寻找解决方案)有/需要使用选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2013-01-15
    • 2017-10-31
    • 2019-11-03
    • 2020-03-01
    • 2017-09-17
    相关资源
    最近更新 更多