Akka:由于不正确的查询参数取消路由

Akka: Cancel Routing Due To Incorrect Query Parameters

所以我有一个类似这样的路由结构

pathPrexix("root"){
  concat {
    path("path") {
      get {
        parameters("someId".as[String], 'fixedValue ! "requiredValue") { params =>

        }
      }
    },
    path(Segment) { extractedValue =>
      .....
    }
  }
} 

如果用户使用不正确的查询参数(缺少 someIdfixedValue 不等于 value)结束对 /root/path 端点的请求,则请求将进一步路由到下一条路线 root/Segment。在这种情况下,extractedValue 将是 path,这将失败并将用户返回由第二条路由处理的错误。

首选的行为是告诉用户他们要么错过了查询参数,要么查询参数必须是给定值之一。有什么方法可以确保发生这种情况吗?

如果我将第二条路径移到第一条路径上方,它将捕获所有发送的请求。

如果 get 不匹配,您只需要 complete 使用适当的错误代码:

path("path") {
  concat(
    get {
      parameters("someId".as[String], 'fixedValue ! "requiredValue") { params =>
      }
    },
    complete(StatusCodes.NotFound)
  )
},

您可以在回复消息中添加额外的信息,但它是非标准的,因此需要客户端知道它。