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

Wiremock独立版动态映射响应值:无法动态获取transformerParameters值

WireMock响应模板动态映射问题解决方案

问题概述

使用WireMock独立版结合响应模板功能时,需要根据请求中的user id(取自request.pathSegments.[1]),从transformerParameters的usernameMapping映射表中动态获取对应的username,但常规模板写法无法实现动态取值。

当前响应映射配置:

{
  "response": {
    "status": 200,
    "headers": {
      "Content-Type": "application/json"
    },
    "transformers": [
      "response-template"
    ],
    "transformerParameters": {
      "usernameMapping": {
        "1": "foo",
        "2": "bar",
        "3": "baz"
      }
    },
    "jsonBody": {
      "id": "{{request.pathSegments.[1]}}",
      "username": "{{parameters.usernameMapping.2}}"
    }
  }
}

尝试过的无效写法:

  • {{parameters.usernameMapping[request.pathSegments.[1]]}}
  • {{parameters.usernameMapping[{{request.pathSegments.[1]}}]}}
  • {{parameters.usernameMapping.{{request.pathSegments.[1]}}}}
  • {{parameters.usernameMapping.[userId]}}(userId已提前赋值)

解决方案

WireMock的响应模板基于Handlebars语法,动态通过变量访问对象属性时,必须使用**lookup辅助函数**,这是你之前遗漏的关键语法。

修改jsonBody中的username字段写法即可:

"jsonBody": {
  "id": "{{request.pathSegments.[1]}}",
  "username": "{{lookup parameters.usernameMapping request.pathSegments.[1]}}"
}

原理说明

Handlebars不支持直接用obj[var]或obj.{{var}}的方式动态访问属性,lookup辅助函数专门用于解决这类场景:

  • 第一个参数传入目标对象(此处为parameters.usernameMapping)
  • 第二个参数传入要访问的属性名(此处为请求路径中的user id:request.pathSegments.[1])

该写法完全依赖WireMock内置功能,无需自定义扩展或编译自定义版本。

内容的提问来源于stack exchange,提问作者Franco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:36:32