加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – akka http没有处理带有美元符号的参数吗?

发布时间:2020-12-16 18:32:04 所属栏目:安全 来源:网络整理
导读:我在我的路线中定义了(OData)查询参数,如下所示: parameters(('$top.as[Int].?,'$skip.as[Int].?)) { (top,skip) = 我有以下拒绝处理程序来处理所有无效参数(handleAll): RejectionHandler.newBuilder() .handleAll[MalformedQueryParamRejection] { param
我在我的路线中定义了(OData)查询参数,如下所示:

parameters(('$top.as[Int].?,'$skip.as[Int].?)) { (top,skip) =>

我有以下拒绝处理程序来处理所有无效参数(handleAll):

RejectionHandler.newBuilder()
  .handleAll[MalformedQueryParamRejection] { paramRejections =>
    // paramRejections is a Seq[MalformedQueryParamRejection]
    ...
  }

问题是当用以下方法调用时

some-endpoint?$top=invalid&$skip=invalid

拒绝处理程序中的paramRejections有2个条目,均为$top,而不是$top的一个条目和$skip的一个条目.

似乎与params上的美元符号有关,因为当我删除这些东西按预期工作.这是一个已知问题还是有可用的解决方法(不包括删除美元符号)?

注意,它似乎只是拒绝处理程序,因为多个参数以美元符号开头有问题,因为当$top和$skip在URI中提供有效值时,路由中的这一行正确地指定top并跳转到变量:

parameters(('$top.as[Int].?,skip) =>

解决方法

您的路由树配置存在问题,可能会评估两个候选路由,并且每个路由都会为$top查询参数生成MalformedQueryParamRejection.

The paramRejections in the rejection handler has 2 entries,both for $top,instead of one for $top and one for $skip.

handleAll不会收集源自同一路由的多个MalformedQueryParamRejection,但会收集来自不同路由的拒绝.

paramRejections是一个Seq [MalformedQueryParamRejection],但只有一个MalformedQueryParamRejection可以拒绝单个路由,特别是(仅)第一个不匹配所需格式的查询参数.

尝试使用最小路由配置(如下例所示),您将体验到正确的行为:

val route = get {
  parameters(('$top.as[Int].?,'$skip.as[Int].?)) {
    (top,skip) => complete(s"$top,$skip")
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读