按正文中根级别的数组大小匹配请求



我试图通过在存根中指定jsonpath来匹配请求,仅当主体是给定大小的数组时才匹配请求。

这是我正在尝试使代码工作的一个示例。

@SpringBootTest
@AutoConfigureWireMock(port = 0)
public class WiremockTest {
@Autowired
private Environment env;
@Test
public void scenario() {
stubFor(post(urlEqualTo("/test"))
.withRequestBody(matchingJsonPath("$[?(@.size() == 1)]"))
.willReturn(aResponse()
.withBody("{"{{{jsonPath request.body '$.[0]'}}}":"value"}")
.withTransformers("response-template")
.withHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE)));
var response = WebClient.create()
.post().uri("http://localhost:%s/test".formatted(env.getRequiredProperty("wiremock.server.port")))
.bodyValue("["key"]")
.retrieve().bodyToMono(String.class).block();
System.out.println(response);
}
}

当运行这个测试时,我收到一条错误消息,说主体不匹配:

Closest stub       | Request
...
$[?(@.size() == 1] | ["key"] <<<<< Body does not match

我已经用jsonPathMatcher为非根级别的数组进行了测试,这似乎很有效,即:

$[?(@.array.size() == 1)]

当机身是时

{
"array": ["1"]
}

然而,我试图模拟的请求只有一个根级别的字符串数组。

我是否对jsonPath做了错误的操作?

经过更多的处理,我找到了一个解决方案,将JsonPath表达式更改为:

[?($.size() == 1)]

我只是在表达式中直接使用根,而不是遍历到根$并使用那里的元素@

相关内容

  • 没有找到相关文章

最新更新