WireMock POST请求中无法将请求体添加到响应体的问题
问题分析
你的问题出在WireMock响应模板的语法使用和JSON结构拼接上:
- 直接用
{{{request.body}}}嵌套在JSON对象的{}中,会导致模板解析异常,无法正确渲染请求体内容 - 手动转义JSON字符串的方式容易引发语法冲突,使得变量未被正确解析
解决方案
推荐两种可行的修复方式:
方式1:使用jsonBody直接构建响应JSON(推荐)
这种方式无需手动处理字符串转义,直接通过JSON结构嵌入请求体:
{ "request": { "method": "POST", "urlPath": "/endpoint" }, "response": { "status": 200, "jsonBody": { "request": "{{parseJson request.body}}", "anotherField": "string" }, "headers": { "Content-Type": "application/json;charset=UTF-8" }, "transformers": ["response-template"] } }
parseJson函数会把请求体的字符串内容解析为JSON对象,直接嵌入响应的request字段中,保证JSON结构合法
方式2:修正字符串形式的body语法
如果坚持使用字符串拼接,需要去掉多余的嵌套花括号,并使用正确的模板变量语法:
{ "request": { "method": "POST", "urlPath": "/endpoint" }, "response": { "status": 200, "body": "{\"request\": {{request.body}}, \"anotherField\": \"string\" }", "headers": { "Content-Type": "application/json;charset=UTF-8" }, "transformers": ["response-template"] } }
- 移除了
{{{request.body}}}外层多余的{},因为request.body本身就是JSON对象格式的字符串 - 使用
{{request.body}}(双重花括号)即可输出原始请求体内容,三重花括号适用于需要保留HTML标签等场景,此处无需使用
关键注意点
- WireMock的
response-template转换器使用Handlebars风格语法,变量通过{{变量名}}调用,$或@是其他模板引擎的语法,此处不适用 - 确保请求体本身是合法的JSON格式,否则
parseJson函数会抛出解析错误
内容的提问来源于stack exchange,提问作者Aabid-Faruk
相关产品推荐
相关产品推荐

