Wiremock 2.33:如何从含点号键的请求中返回响应值?
Wiremock 2.33处理带点号键的JSONPath语法修正
问题根源
你遇到的500错误有两个核心原因:
- Helper名称错误:Wiremock响应模板中用于JSONPath提取的工具是
jsonPath,而非你写的jsonbody,这是触发"找不到helper"报错的直接原因。 - JSONPath语法错误:访问包含点号的键时,必须对键名做特殊处理,否则解析器会把点号识别为层级分隔符,导致无法匹配目标字段。
正确的存根定义
以下是修正后的完整存根示例:
{ "request": { "urlPath": "/path", "method": "ANY" }, "response": { "body": "{{jsonPath request.body '$.details.\"full.name\"'}}", "transformers": ["response-template"] } }
关键语法说明
- Helper名称修正:必须使用
jsonPath(注意首字母大写)调用JSONPath提取功能,同时要确保启用response-template转换器,否则模板语法不会生效。 - 带点号键的JSONPath写法:
- 方式1:用双引号包裹键名,在JSON字符串中需转义双引号,表达式为
$.details."full.name" - 方式2:用方括号+单引号的形式,无需转义,表达式为
$['details']['full.name'],对应存根写法:"body": "{{jsonPath request.body '$[\'details\'][\'full.name\']'}}"
- 方式1:用双引号包裹键名,在JSON字符串中需转义双引号,表达式为
验证要点
确保Wiremock实例已启用响应模板功能:要么启动时添加--enable-response-templating参数,要么在存根中明确配置"transformers": ["response-template"],否则模板表达式不会被解析执行。
内容的提问来源于stack exchange,提问作者Deep
相关产品推荐
相关产品推荐

