当前位置: 首页 > 知识库问答 >
问题:

如果找不到模板响应文件,如何让Wiremock给出默认响应

贝钧
2023-03-14

我目前正在运行Wiremock standalone,我试图模拟一个访问数据库的服务。

我的映射文件如下所示:-

{
    "request": {
        "method": "GET",
        "urlPath": "/testService/search/details"
    },
    "response": {
        "status": 200,
        "headers": {
            "Content-Type": "application/hal+json"
        },
        "transformers": ["response-template"],
        "bodyFileName": "/testTable/{{request.query.productCode}}.json" 
    }
}

所以如果我点击这个网址:-
http://localhost/testService/search/details?productCode=12345

然后它将进入数据库获取退货产品12345。

如果我向服务发送数据库中不存在的请求(例如productCode=0),它会给我一个标准的空响应,例如:-

{
    "products": []
}

因此,我试图让wiremock使用JSON配置执行同样的操作。

目前,如果我使用没有相应响应文件的productCode向wiremck发送请求,我会收到这个错误:-

Error 500 java.io.FileNotFoundException  

但是如果它没有找到响应文件,我希望它用一个空响应回复,所以我想寻找一个匹配的响应文件,如果它没有找到,然后返回到一个默认响应文件,该文件将包含以下内容:-

{
    "products": []
}

我在wiremock文档中没有看到任何引用FileNotFoundException默认响应的内容。

共有1个答案

仉姚石
2023-03-14

因此,我认为您需要编写一个定制的响应转换器来实现这一点。大致如下:

public static class ExampleTransformer extends ResponseDefinitionTransformer {

        @Override
        public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files, Parameters parameters) {
            String productCode = request.queryParameter("productCode").toString();
            File jsonFile = new File("/path/to/json/testTable/" + productCode + ".json")
            if (jsonFile.exists()) {
                 return responseDefinition;
            } else {
                 return new ResponseDefinitionBuilder()
                    .like(responseDefinition)
                    .but()
                    .withBodyFile("/path/to/empty/product/array/file.json")
                    .build();
            }
        }

        @Override
        public String getName() {
            return "example";
        }
    }

然后,您只需将现有映射的转换器更新为您在getName()中定义的名称,并添加一个空的产品JSON文件。转换器将返回带有相应产品代码JSON文件的现有定义响应,或者如果该文件不存在,它将返回指定的空产品JSON文件。

(我没有确定Java代码是否会编译/运行,但这应该足够让您上路了:)

 类似资料:
  • 我正在使用java中的WireMock来存根POST请求。该请求返回一个json主体文件,该文件存储在my local中。存根如下所示: 响应主体文件的一部分,“stubThree”如下所示: 请求url有许多参数,如下所示: stubing工作得很好,但我的目标是使用响应模板提供动态响应。我只想使用请求url中的“subscription_proration_date”值更新json文件的“st

  • 当通过URL调用我的Web应用程序中不存在的项目时,Spring会使用JSON响应,其中包含(时间、状态、错误、消息、路径)等数据。所以,我需要更改这个JSON的结构,特别是我需要删除路径。我该怎么做?我应该在我的项目中在哪里实现异常的自定义?向大家问好! json响应修改

  • 我现在正在尝试使用FastAPI构建一个API。我想让一个路由(接受查询)也在响应中返回它们,以便用户可以仔细检查他输入的查询(也可以查看总共有多少页等)。 我正在使用response_model响应方式,并且一生都无法弄清楚如何将其他参数插入响应中。 我已经尝试将响应模型中的所有字段设置为可选,因此它在检查时不再抛出错误,但它仍然只是(如果它响应)在没有添加信息的情况下响应。在下面,您可以看到我

  • 问题内容: 如何让selenium等待日历小部件的加载?现在,我只是在将测试用例导出到junit程序后进行操作。 问题答案: 我会用 这将一直等待,直到元素出现在DOM中为止。 如果您需要检查元素是否可见,则最好使用

  • 问题内容: 如何让硒等待日历小部件的加载?现在,在将测试用例导出到junit程序后,我只是在做一个。 问题答案: 我会用 这将一直等待,直到元素出现在DOM中为止。 如果您需要检查元素是否可见,则最好使用

  • JavaFX MenuItem可以通过设置ActionEvent EventHandler来响应大多数按键事件。但是,虽然事件处理程序捕获KeyCode.Enter的按键,但它不捕获KeyCode.Tab按键事件。显然,像TAB这样的一些关键事件是在更深层次上处理的。例如,箭头键启用菜单的遍历。 My ContextMenu是用户开始在TextField中键入的电子邮件地址字符串的完整列表。用户希