【问题标题】:Match Url path with query string将 URL 路径与查询字符串匹配
【发布时间】:2018-04-28 15:24:24
【问题描述】:

我正在从 SOAPUI 向wiremock 服务器发送一个请求,并且我正在尝试匹配 url。

这是正在发出的请求:/user/test/?and=query

我写了以下正则表达式:

stubFor(post(urlPathMatching("/user/test/\\?(and)\\=([a-z]*)"))

问题是当我尝试匹配“?”当我使用 one 反斜杠来捕获文字字符时,Java 中出现错误提示:

"Illegal Escape Character"

我尝试解决问题的方法: 我知道解决方案是使用第二个反斜杠来捕获“?”像这样:“\?”,但是当我发送请求时,我收到一条错误消息,指出 url 不匹配,因为这是与从 soap ui 发送的原始请求匹配的请求:

/user/test/\?(and)\=([a-z]*) 

有人可以帮我解决这个问题吗?

编辑:第二次尝试 我尝试使用点符号来表示“?”和“=”符号。我已经在正则表达式测试仪上对此进行了测试,它检查出来了,但是,它仍然说 url 在soap ui 上不匹配。

正则表达式:stubFor(post(urlPathMatching("/user/test/.*(and).*([a-z]*)")).atPriority(1)

不匹配的网址:/user/test/.*(and).*([a-z]*)

【问题讨论】:

  • 有人知道吗?
  • 要匹配/user/test/?and=query,您需要转义斜杠和问号。所以试试:\/user\/test\/\?and=query。或者更一般地说\/user\/test\/\?\w+=\w+

标签: java regex wiremock


【解决方案1】:

当您使用urlPathMatching() 时,您不应将查询参数放在网址中。该方法仅适用于urlEqualTo()

您应该使用withQueryParam() 单独指定参数,因此您的存根设置应该是:

stubFor(post(urlPathMatching("/user/test/")).withQueryParam("and", matching("[a-z]*")));

【讨论】:

    【解决方案2】:

    \\ 只是转义\,你应该在前面加一个\ 吗?逃避? 像这样: stubFor(post(urlPathMatching("/user/test/\\\?(and)\\=([a-z]*)"))

    【讨论】:

    • 嗨@Thang X. Vu,我试过了,但不幸的是它不起作用
    • 啊哈,我明白了,你忘了在 user 和 test 之前转义两个 / 。把 \ 再试一次。
    • hmm 我不太明白,你的意思是这样的:///user/test?
    • 不,确切地说是:\/user\/test\/\\\?(and)\\=([a-z]*)
    • 但这在 Java 中不起作用。当我尝试 \/user 时,我收到一条错误消息,指出非法字符转义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2014-02-06
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多