WireMock 里按路径注册了桩,业务请求打过去仍然 404,stub 日志只有一句 Request was not matched,看不出差在哪个条件。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,注册时只写了 urlPathEqualTo,真实请求还带着 query 参数和自定义请求头,匹配器把整条请求拿来比对,条件差一个就落到默认的未匹配响应,看着像桩没生效。

碰到「WireMock 匹配失效」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。改完顺手把文档补一句,省得下次自己重新推一遍。

curl -s localhost:8080/__admin/requests/unmatched
stubFor(get(urlPathEqualTo('/pay')).willReturn(ok()));

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,打开 verbose 日志看未匹配请求的完整地址;路径和 query 参数分开声明匹配条件;配一个兜底桩把漏网请求记录下来。

最后用这个标准收尾,unmatched 列表清空,桩的命中次数和业务侧请求数对得上。

作者 9823189