JSON响应中的Wiremock变量替换

JSON响应中的Wiremock变量替换,json,jsonpath,wiremock,Json,Jsonpath,Wiremock,我正在尝试配置Wiremock映射以返回一个JSON响应,其中包含来自请求的值 请求很简单 { "clientTag": "123" } 它的映射是: { "priority": 4, "request": { "method": "POST", "urlPattern": "/test" }, "response": { "status": 200, "body": "{ \"loginId\": \"${loginId}\" }",

我正在尝试配置Wiremock映射以返回一个JSON响应,其中包含来自请求的值

请求很简单

{ "clientTag": "123" }
它的映射是:

{
  "priority": 4,
  "request": {
    "method": "POST",
    "urlPattern": "/test"
  },
  "response": {
    "status": 200,
    "body": "{ \"loginId\": \"${loginId}\" }",
    "headers": {
      "Content-Type": "application/json"
    }
  },
  "captures" : [ {
            "source" : "BODY",
            "target" : "loginId",
            "pattern" : "$..clientTag",
            "captureGroup" : 1
  } ]
}
我收到的答复是:

{ "loginId": "" }
而预期的是:

{ "loginId": "123" }
如果我切换到XML请求,那么一切都可以使用模式
(.*)
,但我想继续使用JSON

不幸的是,Wiremock文档很少,因此出现了这个问题。有什么想法吗


更新:如果有人稍后阅读此内容,您最好使用代码中的转换,这些转换在稍后的Wiremock版本中可用。

除非您添加了一个您没有提到的扩展,否则这将无法工作-JSON API中没有“捕获”元素,也没有任何方法(没有扩展)在响应中进行变量替换。

现在确实支持这一点

发送请求时,如:

并使用映射如:

响应将如下所示:

请注意,此功能当前处于预览模式,请参阅NuGet软件包版本1.0.4.8-preview-01


如果您有任何问题,只需在此github项目上创建一个问题。

这似乎是一个完美的使用案例

它可以很容易地与独立服务器集成,如下所示:

java-cp“wiremock-body-transformer-1.1.6.jar:wiremock-2.3.1-standalone.jar”com.github.tomakehurst.wiremock.standalone.WireMockServerRunner--verbose--extensions com.opentable.extension.BodyTransformer

此扩展允许您在请求中轻松指定要在响应中匹配的变量

{
    "request": {
        "method": "POST",
        "urlPath": "/transform",
        "bodyPatterns": [
            {
                "matchesJsonPath": "$.name"
            }
        ]
    },
    "response": {
        "status": 200,
        "body": "{\"responseName\": \"$(name)\"}",
        "headers": {
            "Content-Type": "application/json"
        },
        "transformers": ["body-transformer"]
    }
}
它还可以轻松地在响应中生成一个随机整数,如下所示:

{
    "request": {
        "method": "POST",
        "urlPath": "/transform",
    },
    "response": {
        "status": 200,
        "body": "{\"randomInteger\": \"$(!RandomInteger)\"}",
        "headers": {
            "Content-Type": "application/json"
        },
        "transformers": ["body-transformer"]
    }
}

嗨,汤姆,首先,谢谢你的精彩模仿!你是对的,我检查了一下,发现我们确实有捕获的扩展,我会从中挖掘。wiremock有完整的JSON API吗?我很难在互联网上找到很多关于它的信息。虽然没有一个文档覆盖整个JSON API,但整个wiremock.org都覆盖了它。你在找什么特别的东西吗?这正是我最后做的,谢谢!我的错是没有更新问题。听到这个消息太棒了!
{
    "path": "/test",
    "result": "stef"
}
{
    "request": {
        "method": "POST",
        "urlPath": "/transform",
        "bodyPatterns": [
            {
                "matchesJsonPath": "$.name"
            }
        ]
    },
    "response": {
        "status": 200,
        "body": "{\"responseName\": \"$(name)\"}",
        "headers": {
            "Content-Type": "application/json"
        },
        "transformers": ["body-transformer"]
    }
}
{
    "request": {
        "method": "POST",
        "urlPath": "/transform",
    },
    "response": {
        "status": 200,
        "body": "{\"randomInteger\": \"$(!RandomInteger)\"}",
        "headers": {
            "Content-Type": "application/json"
        },
        "transformers": ["body-transformer"]
    }
}