我必须实现一个GET,我可以有5个不同的查询参数,但只有传递一个参数时,请求才有效。我是Scala世界的新手。什么是最好的方法?
目前我使用的是参数映射,但我愿意接受建议。
pathPrefix("cars") {
pathSingleSlash {
complete("/engines")
}
get {
parameterMap { params =>
if (params.size != 1) {
complete(StatusCodes.BadRequest)
} else {
params.foreach{
case ("asd", value ) //doSomething
case _ => complete(StatusCodes.BadRequest)
}
}
}
}
这目前无效,因为:
Error:(39, 27) type mismatch;
found : Unit
required: akka.http.scaladsl.server.RequestContext => scala.concurrent.Future[akka.http.scaladsl.server.RouteResult]
params.foreach{
我可以通过在最后添加一个完整来解决它,但这不是解决方案。有什么建议?
有效请求
/app/cars/engines?capacity=1000
/app/cars/engines?type=benzin
非法请求
/app/cars/engines?type=benzin&capacity=1000
尽管存在“类型不匹配”错误,但您的整体方法仍然很好。造成这种错误的原因是使用foreach
,它返回一个Unit
。修复错误的一种方法是在检查head
的大小为1之后检查Map
的Map
:
get {
parameterMap { params =>
if (params.size != 1) {
complete(StatusCodes.BadRequest)
} else {
params.head match {
case ("asd", value) =>
// do something
complete(StatusCodes.OK)
case _ =>
complete(StatusCodes.BadRequest)
}
}
}
}