【问题标题】:Getting 404 when i try to call endpoint with multiple query parameter当我尝试使用多个查询参数调用端点时得到 404
【发布时间】:2020-07-16 22:36:18
【问题描述】:

我是这样做的 curl http://localhost:9000/vehicle?time=10:10:10&x=2&y=2 Router 中的路由定义如下

override def routes: Routes = {
    case GET(p"/" ? q"time=$time" & q"x=${int(x)}" & q"y=${int(y)}") =>
      controller.getVehicle(time, x, y)

    case GET(p"/"? q"stop_id=${stopId}") =>
      controller.getVehicle(stopId)

    case GET(p"/delay/"?q"line_id=${lineId}") =>
      controller.getDelay(lineId)
  }

路由文件看起来像

GET     /vehicle    transport.TransportController.getVehicle(time: String, x: Int, y: Int)
->         /v1/posts                                v1.post.PostRouter
->         /vehicle                                 transport.TransportRouter
->         /vehicle/delay                             transport.TransportRouter

使用动态路由 SIRD 它给了我 [调试] a.ErrorHandler - onClientError: statusCode = 404, uri = /vehicle?time=10:10:10, message =

和静态

GET /vehicle transport.TransportController.getVehicle(time: String, x: Int, y: Int)

我明白了 [调试] a.ErrorHandler - onClientError: statusCode = 400, uri = /vehicle?time=10:10:10, message = Missing parameter: x

哪里出错了?为什么它没有选择剩余的参数?

【问题讨论】:

  • 好吧,TransportController 的声明上方没有 package controllers 行,那么您期望什么?如果您想要有用的答案,请提供一个最小的、可重复的示例:stackoverflow.com/help/minimal-reproducible-example 老实说,如果人们这样做,80% 的问题就会消失。
  • 它们在一个包中,我只是没有在此处发布。错误在路由文件中,我修复了它。但无论如何,它仍然给我另一个错误。当我卷曲时。只需要时间而不是 x y

标签: java scala playframework


【解决方案1】:

这不是你的代码问题,而是你的 curl 命令问题。与号的处理方式不同,在您的情况下不作为查询参数。尝试在您的网址周围添加引号:

curl "http://localhost:9000/vehicle?time=10:10:10&x=2&y=2"

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 2013-02-23
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2015-04-29
    • 2023-03-23
    相关资源
    最近更新 更多