当我尝试使用多个查询参数调用端点时获取 404

Getting 404 when i try to call endpoint with multiple query parameter

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

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

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

不是你的代码问题,是你的curl命令问题。符号的处理方式不同,在您的情况下不作为查询参数。尝试在 url:

周围添加引号
curl "http://localhost:9000/vehicle?time=10:10:10&x=2&y=2"