首页 > 解决方案 > 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)));

我在文档中没有找到任何类似的样本。谢谢!

标签: javawiremock

解决方案


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);

这对我很有效。


推荐阅读