Wiremock Stand alone - 如何使用请求数据操作响应

Sam*_*Sam 7 java mocking stub wiremock

我试图使用Wiremock Standalone服务器实现POST REST调用的模拟.我面临这样的挑战,假设帖子正文包含一个"名称"字段及其值,应该在该POST调用的响应中返回相同的值.我的json文件如下所示:

{
"priority": 1,
"request": {
    "method": "POST",
    "urlPath": "/primeSlots",
    "bodyPatterns" : [ {
        "matchesJsonPath" : "{ \"things\": [ { \"name\": \"794363\" }] 
 }"
    } ]
 },
 "response": {
    "status": 200,
    "body": "{{$.things.name.value}}",
    "transformers": ["response-template"]
 }
}
Run Code Online (Sandbox Code Playgroud)

所以,我需要获得值,即794363,但使用上述方法无法在post响应体中获取它.

我也试过这个:

{
 "request": {
    "method": "POST",
    "urlPath": "/transform",
    "bodyPatterns": [
        {
            "matchesJsonPath" : "$.things[?(@.name =~ /[0-9]+/i)]"
        }
    ]
  },
  "response": {
    "status": 200,
    "body": "{\"responseName\": \"
   {{request.body.things.name.value}}\"}",
    "headers": {
        "Content-Type": "application/json"
    },
    "transformers": ["body-transformer"]
  }
 }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,即使我使用的regEx与请求中的任何数字相匹配,如何使用Wiremock独立的json文件在响应中返回相同的数字?谢谢.

Tom*_*Tom 2

不幸的是,WireMock 的响应模板转换器当前不会将请求正文分解为映射,而这对于您尝试执行的操作来说是必需的。请求正文只是一个字符串。

启用此功能的最简单方法可能是编写一个 Handlebars 帮助程序,该帮助程序实现 JSONPath 或其他一些用于查询 JSON 文档的机制,然后在初始化 WireMock 时将其注册到模板转换器。

在某些时候,我会编写句柄助手来为 XML 和 JSON 执行此类操作,但这不会持续一段时间。

  • WireMock 中现在有一个 Handlebars 帮助器,用于使用 JSONPath 查询 JSON 文档,因此无需再编写自定义转换器/帮助器。 (2认同)