使用JSON路径时,WebTestClient的DSL无法检索集合

问题描述

我有一个Spring Boot position: relative WebFlux应用程序。我正在使用2.3.2.RELEASE为控制器构建测试,并注入@WebFluxTest实例。一切正常,但是(这很愚蠢)我似乎找不到一种方法,可以使用JSONPath从响应中为给定的JSON元素/键检索其对应的值(元素的集合)。

这是测试:

WebTestClient

无论我使用什么表达式来获得@Test void getById_Spec() { // HTTP 200 (OK) final var expected = Entity.reconFoobling(); Mockito.when(service.findById(ArgumentMatchers.any(GetItemsCommand.class))) .thenReturn(Flux.just(expected)); webClient.get() .uri(URI_FROM.apply(expected.getId())) .accept(MediaType.APPLICATION_JSON) .exchange() .expectStatus().isOk() .expectHeader().contentType(MediaType.APPLICATION_JSON) .expectBody() .jsonPath("$.length()").isEqualTo(1) .jsonPath("$[0].code").isEqualTo("1001") ... .jsonPath("$[0].alarms.length()").isEqualTo(2) .jsonPath("$[0].alarms[0].lanes.length()").isEqualTo(1) // .jsonPath("$[0].alarms[0].lanes").isEqualTo(List.of("PRIMARY")) // .jsonPath("$[0].alarms[0].lanes.").isEqualTo(List.of("PRIMARY")) // .jsonPath("$[0].alarms[0].lanes.*").isEqualTo(List.of("PRIMARY")) // .jsonPath("$[0].alarms[0].lanes[*]").isEqualTo(List.of("PRIMARY")) ... .jsonPath("$[0]._id").isEqualTo(1_100L); Mockito.verifyNoInteractions(gateway,store); } (我首先在这里测试:https://jsonpath.com/),它都行不通,我总是得到:

$[0].alarms[0].lanes

...而且我知道我收到的JSON是正确的:

java.lang.AssertionError: JSON path "$[0].alarms[0].lanes" expected:<[PRIMARY]> but was:<null>
Expected :[PRIMARY]
Actual   :null

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)