Quarkus环境下Java应用配置WireMock匹配特定对象格式查询参数
WireMock无法匹配Quarkus序列化的对象查询参数的解决办法
问题本质
你的Quarkus应用通过@RestQuery("sortOrder")注解,把SortOrder对象直接序列化成了单个查询参数值(格式示例:TransactionSearchCriteria.SortOrder(property=merchantId,direction=DESC)),但当前WireMock配置里错误地用了拆分的myObj.property和myObj.direction参数做匹配,两者不匹配导致返回"Resource not found"。
修复步骤
修改WireMock的JSON配置,将queryParameters中的拆分参数替换为针对sortOrder完整参数的匹配规则,分两种场景处理:
场景1:固定测试用例(精确匹配)
如果测试中sortOrder的值固定,直接用equalTo匹配完整的序列化字符串:
{ "request": { "method": "GET", "urlPathPattern": "/my/path", "headers": { "Accept": { "equalTo": "application/json" }, "Ocp-Apim-Subscription-Key": { "equalTo": "test" } }, "queryParameters": { "x": { "equalTo": "0" }, "y": { "equalTo": "2" }, "sortOrder": { "equalTo": "TransactionSearchCriteria.SortOrder(property=merchantId,direction=DESC)" }, "startDate": { "equalTo": "2022-01-16T01:00:00Z" }, "endDate": { "equalTo": "2024-01-17T01:00:00Z" } } }, "response": { "status": 200, "headers": { "Content-Type": "application/json" }, "bodyFileName": "response.json" } }
注意:匹配字符串必须和请求日志里的
sortOrder值完全一致——包括类名、属性名、方向的大小写(比如日志里是DESC,别写成小写desc)、括号和逗号的格式。
场景2:多测试用例(正则模糊匹配)
如果需要适配不同的property或direction值,用matchesRegex做灵活匹配:
"sortOrder": { "matchesRegex": "TransactionSearchCriteria\\.SortOrder\\(property=[a-zA-Z0-9_]+,direction=(ASC|DESC)\\)" }
这个正则可以匹配任意合法属性名,以及升序(ASC)/降序(DESC)的sortOrder参数。
额外提醒
- WireMock会自动解码URL编码后的参数值,所以配置里不用写编码后的字符(比如不用把
=换成%3D)。 - 如果Quarkus对
SortOrder的序列化规则有变化(比如加了空格、类名缩写),要同步调整WireMock的匹配规则。
验证
修改配置后重新运行测试,查看WireMock的请求匹配日志,确认sortOrder参数和stub规则完全匹配,即可成功返回200响应。
内容的提问来源于stack exchange,提问作者Mr.Z
相关产品推荐
相关产品推荐

