You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:50:11