将Url路径与查询字符串匹配

时间:2018-04-28 15:24:25

标签: java regex wiremock

我正在向一个线程服务器发送请求,我正在尝试匹配该网址。

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

我写了以下正则表达式:

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

问题是当我尝试匹配“?”时当我使用一个反斜杠来捕获文字字符时,我在Java中遇到错误说:

"Illegal Escape Character"

我尝试解决此问题的方法: 我知道解决方案是使用第二个反斜杠来捕获“?”像这样:“\?”,但是当我发送请求时,我收到一个错误,说网址不匹配,因为这是与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]*)

2 个答案:

答案 0 :(得分:0)

使用urlPathMatching()时,请勿将查询参数放在url中。该方法仅适用于urlEqualTo()

相反,您应该使用withQueryParam()分别指定参数,因此存根设置应为:

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

答案 1 :(得分:-1)

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