WireMock路径参数匹配问题:求可匹配任意路径参数(最终为UUID)的urlPathPattern正则表达式
WireMock匹配带UUID路径参数的POST请求解决方案
我来帮你解决这个WireMock的匹配问题~你之前用的urlPathPattern: "/ngdms/orders/*"之所以不生效,是因为WireMock的urlPathPattern采用的是Java正则表达式语法,而这里的*在正则里不是“任意字符通配”的意思——它表示的是“前面的字符出现0次或多次”,所以你的配置其实是匹配/ngdms/orders后面跟着0个或多个/,自然匹配不上带UUID的路径啦。
下面给你两种可行的方案:
方案1:匹配任意格式的order-id(宽松匹配)
如果不需要严格校验order-id是UUID,只是想匹配/ngdms/orders/后面跟任意非空内容的请求,可以用.+正则(.匹配任意单个字符,+表示至少出现一次):
{ "request": { "method": "POST", "urlPathPattern": "/ngdms/orders/.+" }, "response": { "status": 200, "body": "Order processed successfully", "headers": { "Content-Type": "application/json" } } }
方案2:严格匹配UUID格式的order-id
如果需要确保order-id是标准的UUID(比如你示例里的b41a627e-6981-403a-94cd-c225b8036ef1这种8-4-4-4-12的十六进制格式),可以用精准的UUID正则表达式:
{ "request": { "method": "POST", "urlPathPattern": "/ngdms/orders/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" }, "response": { "status": 200, "body": "UUID format order processed successfully", "headers": { "Content-Type": "application/json" } } }
这个正则的含义是:
[0-9a-fA-F]:匹配任意十六进制字符(大小写都支持){8}/{4}等:指定前面的字符出现的次数,对应UUID各段的长度
这样配置后,WireMock就能正确匹配你的POST请求啦。
内容的提问来源于stack exchange,提问作者greengold
相关产品推荐
相关产品推荐

