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

scala – 播放框架解析查询参数中的分号

发布时间:2020-12-16 18:35:44 所属栏目:安全 来源:网络整理
导读:我正在重构一个使用Play Framework而不是 Scalatra的项目,并且遇到包含分号的查询参数时出现问题,例如: ?/ URL过滤器过滤器1 =:VAL1;过滤器2:val2的 在Scalatra中映射到filter =“filter1:val1; filter2:val2”,但在Play Framework中映射到filter =“f
我正在重构一个使用Play Framework而不是 Scalatra的项目,并且遇到包含分号的查询参数时出现问题,例如:
?/ URL过滤器过滤器1 =:VAL1;过滤器2:val2的
在Scalatra中映射到filter =“filter1:val1; filter2:val2”,但在Play Framework中映射到filter =“filter1:val1”.我发现的唯一解决方案,Escape semicolon route playframework 2.0.2,建议使用正则表达式捕获整个参数,但这似乎只适用于路径参数而不是查询参数 – 我的一个要求是我无法改变的方式前端调用api,即我无法将查询参数更改为路径参数.

如何告诉Play不要在查询参数中解析分号,即返回“filter1; filter2”而不是“filter1”?

我可以使用“request.rawQueryString”上的正则表达式手动解析查询参数,但如果可能的话我宁愿避免这种情况.

解决方法

我们使用的解决方案是使用隐式类解析查询参数,这不像我想象的那样繁重.

implicit class ParsedRawQueryString[+T](req: Request[T]) {

  import java.net.URLDecoder.decode

  def parsedRawQueryString = (for {
    s <- decode(req.rawQueryString,"UTF-8").split('&') if s.contains('=')
  } yield {
    val index = s.indexOf('=')
    s.substring(0,index) -> s.substring(index + 1)
  }).toMap
}

def route = Action {
  request => 
    val queryParams = request.parsedRawQueryString
}

(编辑:李大同)

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

    推荐文章
      热点阅读