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 =>
.....
}
}
}
如果用户使用不正确的查询参数(缺少 someId
或 fixedValue
不等于 value
)结束对 /root/path
端点的请求,则请求将进一步路由到下一条路线 root/Segment
。在这种情况下,extractedValue
将是 path
,这将失败并将用户返回由第二条路由处理的错误。
首选的行为是告诉用户他们要么错过了查询参数,要么查询参数必须是给定值之一。有什么方法可以确保发生这种情况吗?
如果我将第二条路径移到第一条路径上方,它将捕获所有发送的请求。
如果 get
不匹配,您只需要 complete
使用适当的错误代码:
path("path") {
concat(
get {
parameters("someId".as[String], 'fixedValue ! "requiredValue") { params =>
}
},
complete(StatusCodes.NotFound)
)
},
您可以在回复消息中添加额外的信息,但它是非标准的,因此需要客户端知道它。
所以我有一个类似这样的路由结构
pathPrexix("root"){
concat {
path("path") {
get {
parameters("someId".as[String], 'fixedValue ! "requiredValue") { params =>
}
}
},
path(Segment) { extractedValue =>
.....
}
}
}
如果用户使用不正确的查询参数(缺少 someId
或 fixedValue
不等于 value
)结束对 /root/path
端点的请求,则请求将进一步路由到下一条路线 root/Segment
。在这种情况下,extractedValue
将是 path
,这将失败并将用户返回由第二条路由处理的错误。
首选的行为是告诉用户他们要么错过了查询参数,要么查询参数必须是给定值之一。有什么方法可以确保发生这种情况吗?
如果我将第二条路径移到第一条路径上方,它将捕获所有发送的请求。
如果 get
不匹配,您只需要 complete
使用适当的错误代码:
path("path") {
concat(
get {
parameters("someId".as[String], 'fixedValue ! "requiredValue") { params =>
}
},
complete(StatusCodes.NotFound)
)
},
您可以在回复消息中添加额外的信息,但它是非标准的,因此需要客户端知道它。