Wiremock请求头匹配失效:为何始终匹配第一条路由?
问题排查与解决思路
你的问题核心是Wiremock路由匹配优先级和条件配置的问题,以下是具体排查点和修复方案:
1. 核心原因:路由匹配顺序与条件宽松度
Wiremock的路由匹配逻辑是按定义顺序依次匹配,命中第一个符合所有条件的路由。如果带error头的请求命中了第一条路由,说明第一条路由的匹配条件没有严格限制仅接受x-fapi-interaction-id: okay的请求,导致所有符合URL和POST方法的请求都优先匹配它。
2. 具体排查点
- 检查第一条路由的请求头匹配规则:
如果你第一条路由的request节点下没有明确添加x-fapi-interaction-id的精确匹配条件,或者用了contains这类宽松匹配,那带error头的请求也会满足第一条路由的条件。比如错误配置:{ "request": { "method": "POST", "url": "/middleware-nz-sandbox/v2.0/domestic-payment-consents" // 缺少headers匹配,或headers里用了宽松规则 }, "response": {"status": 201} } - 检查路由配置的语法正确性:
确保请求头匹配的格式正确,必须用equalTo(精确匹配)来限定头值,且嵌套结构正确。比如错误写法:// 错误:直接写字符串而不是对象 "headers": {"x-fapi-interaction-id": "okay"} - 验证请求头的实际传递:
用curl模拟请求,确认x-fapi-interaction-id头是否正确携带,比如:
同时查看Wiremock的verbose日志,确认请求头是否被正确解析。curl -X POST http://localhost:8080/middleware-nz-sandbox/v2.0/domestic-payment-consents \ -H "x-fapi-interaction-id: error" -v
3. 修复后的正确路由配置
确保两个路由都有严格的头匹配条件,示例routes.json如下:
[ { "request": { "method": "POST", "url": "/middleware-nz-sandbox/v2.0/domestic-payment-consents", "headers": { "x-fapi-interaction-id": { "equalTo": "okay" } } }, "response": { "status": 201 } }, { "request": { "method": "POST", "url": "/middleware-nz-sandbox/v2.0/domestic-payment-consents", "headers": { "x-fapi-interaction-id": { "equalTo": "error" } } }, "response": { "status": 500 } } ]
配置后重启Wiremock,带okay头的请求会命中第一条返回201,带error头的会命中第二条返回500。
内容的提问来源于stack exchange,提问作者Roger
相关产品推荐
相关产品推荐

