java - WireMock - 包含 JSON 属性的请求的存根
问题描述
我正在尝试模拟相同的请求 URL(多次),根据 JSON 正文内容具有不同的响应。
我的请求 JSON 是动态构建的,因此我不能equalToJson
在 Mock 上静态使用该函数。
我有这样的相同 JSON:
{
// Changes according to the request
"task": "TEXT_ENTITY_RECOGNITION",
"category": "TEXT",
"data": content
}
wireMockServer
存根的最佳方法是什么?
我正在尝试这样的事情
wireMockServer.stubFor(post(urlEqualTo("/request"))
.withRequestBody(containing("TEXT_ENTITY_RECOGNITION"))
.withHeader("Content-Type", equalTo("application/json"))
.willReturn(aResponse()
.withStatus(201)
.withHeader("Content-Type", "application/json")
.withBody(mockedJson)));
我在文档中没有找到任何类似的样本。谢谢!
解决方案
WireMock 提供了几种内容模式 EqualToPattern 和 ContainsPattern 是其中少数。尝试类似的东西:
StringValuePattern urlPattern = new EqualToJsonPattern("/request", true, true);
MappingBuilder mappingBuilder = WireMock.post(new UrlPattern(urlPattern, false));
StringValuePattern requestBodyPattern = new ContainsPattern("TEXT_ENTITY_RECOGNITION");
mappingBuilder.withRequestBody(requestBodyPattern).withHeader("Content-Type", new EqualToJsonPattern("application/json", true, true));
ResponseDefinitionBuilder response = WireMock.aResponse().withBody("Successful Custom Body Response").withStatus(201).withHeader("Content-Type", "application/json");
mappingBuilder.willReturn(response);
wireMockServer.stubFor(mappingBuilder);
这对我很有效。
推荐阅读
- node.js - 找不到模块“猫鼬”,即使它存在
- java - 无法将 JDBC-Hikari 连接到我的 Micronaut 应用程序
- pyspark - spark-submit 不选择项目结构的模块和子模块
- r - 在遍历列时校正密度图
- sql - IS_ROLEMEMBER 在 SQL Server 2012 或 2008R2 中是否可用
- python - 在 PyTorch 中实现 prox-linear 优化器
- typescript - TypeScript:使用默认值推断参数的类型
- python-3.x - geodjango:oserror:“找不到指定的程序”
- angular - 如何通过路由更改延迟加载应用程序
- python - 在 if 条件下替换数组后不返回新数组