Spring WebClient извлекает значение JsonPath
Я использую тестовые возможности Spring 5 WebClient и хотел бы извлечь тело, соответствующее jsonPath
выражение, но не могу найти подходящий способ сделать это. Например (код на Kotlin, но я надеюсь, что это не имеет никакого значения):
client!!.get().uri("/app/metrics")
.accept(MediaType.APPLICATION_JSON_UTF8)
.exchange()
.expectStatus().isOk
.expectBody()
.jsonPath("$.names")
.isArray
Фактическое тело JSON:
{
"names": [
"jvm.buffer.memory.used",
"jvm.memory.used",
"jvm.buffer.count",
"jvm.gc.memory.allocated",
"logback.events",
"process.uptime",
"jvm.memory.committed",
"system.load.average.1m",
"jvm.gc.max.data.size",
"jvm.buffer.total.capacity",
"jvm.memory.max",
"system.cpu.count",
"jvm.threads.daemon",
"system.cpu.usage",
"jvm.threads.live",
"process.start.time",
"jvm.threads.peak",
"jvm.gc.live.data.size",
"jvm.gc.memory.promoted",
"process.cpu.usage"
]
}
Поэтому я хотел бы получить список имен в список переменных и использовать его. Есть ли способ сделать это с током jsonPath
служба поддержки?
1 ответ
Как то так должно работать (пробовал с springBootVersion = '2.1.0.RELEASE'
):
client.get().uri("/app/metrics")
.accept(MediaType.APPLICATION_JSON_UTF8)
.exchange()
.expectStatus().isOk
.expectBody()
.jsonPath("$.names")
.value<JSONArray> { json ->
json.toList().forEach { println(it) }
}
напечатает:
jvm.buffer.memory.used
jvm.memory.used
jvm.buffer.count
jvm.gc.memory.allocated
logback.events
process.uptime
jvm.memory.committed
system.load.average.1m
jvm.gc.max.data.size
jvm.buffer.total.capacity
jvm.memory.max
system.cpu.count
jvm.threads.daemon
system.cpu.usage
jvm.threads.live
process.start.time
jvm.threads.peak
jvm.gc.live.data.size
jvm.gc.memory.promoted
process.cpu.usage