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

如何在WireMock响应模板中用Handlebars为JSON对象注入字段

WireMock自定义响应模板:添加自定义字段并保留原请求体结构

使用WireMock Docker镜像 wiremock/wiremock:2.35.0,需要基于请求体生成Mock响应,要求在响应中添加自定义字段"my field": 123,同时完整保留原请求体的所有字段、值类型(比如数字、数组、嵌套对象)。但Handlebars原生没有能识别JSON字段类型的助手,之前尝试的模板无法生效。

原始请求体

{
  "number": 123,
  "text": "test",
  "array": [
      1,
      2,
      3
  ],
  "nested object": [
      {
          "a": 1,
          "text": "test",
          "array": [
              {
                  "a": 1
              }
          ]
      }
  ]
}

目标响应体

{
  "my field": 123,
  "number": 123,
  "text": "test",
  "array": [
      1,
      2,
      3
  ],
  "nested object": [
      {
          "a": 1,
          "text": "test",
          "array": [
              {
                  "a": 1
              }
          ]
      }
  ]
}

之前模板的问题

之前尝试的模板:

{\"my field\": 123, {{#each (jsonPath request.body '$')}} \"{{@key}}\": \"{{this}}\", {{/each}}}

核心问题:

  1. 用"{{this}}"强制把所有值转成字符串,比如数字123变成"123",数组、嵌套对象也会被序列化为字符串,彻底破坏原JSON结构和类型;
  2. 遍历后会多出末尾逗号,导致JSON格式非法。

解决方案

方法1:直接拼接原始请求体字符串(最简单)

利用WireMock的request.body获取原始请求体字符串,通过字符串替换去掉首尾的{},再和自定义字段拼接成合法JSON:

{
  "my field": 123,
  {{request.body trim="true" replaceFirst="^\\{" "" replaceFirst="\\}$" ""}}
}
  • trim="true":去除请求体字符串首尾空白字符
  • replaceFirst="^\\{" "":去掉开头的{
  • replaceFirst="\\}$" "":去掉结尾的}
    这种方式完全保留原请求体的结构和类型,无任何类型转换问题。

方法2:使用JSON Transformer扩展(适合复杂转换)

如果需要更复杂的JSON合并或转换,可启用WireMock的json-transformer扩展:
启动Docker容器时添加扩展参数:

docker run -p 8080:8080 wiremock/wiremock:2.35.0 --extensions com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer,com.opentable.extension.JsonTransformer

然后用jsonMerge助手合并原请求体和自定义字段:

{{{jsonMerge (parseJson request.body) (parseJson '{"my field": 123}')}}}
  • parseJson:将字符串解析为JSON对象
  • jsonMerge:合并两个JSON对象,自动处理字段合并,保留所有值类型
  • 三重花括号{{{}}}:避免HTML转义,直接输出JSON内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:31