Я не думаю, что ваша проблема заключается в неизменности, это JSON анализ против методов Гатлинга .find и .findAll.
Я собираюсь сделать предположение, что ваш ответ выглядит примерно так ...
{"data":{"sendMessage":{"targetedRecipients":[1,4,2,3]}}}
, и в этом случае метод .findAll Гатлинга вернет вектор (он всегда это делает, если что-то найдет), но у него будет только один элемент, который будет "[1,4,2,3] "- ie: строка, представляющая данные json, поэтому сортировка коллекции одного элемента, естественно, ничего не дает. Чтобы заставить .findAll вести себя так, как вы, похоже, ожидаете, вам понадобится что-то вроде ...
{"data":
{"sendMessage":
{"targetedRecipients":
[{"recipientId":1},
{"recipientId":4},
{"recipientId":2},
{"recipientId":3}]
}}}
, которое вы можете использовать .jsonPath("$..recipientId").findAll
, чтобы превратить в вектор [String] идентификаторов .
Таким образом, предполагая, что вы действительно получаете только одно строковое представление массива значений, вы можете использовать прямое преобразование для генерации массива и сортировки (как вы пытались в своем примере)
Вот рабочая версия
val data = """{"data":{"sendMessage":{"targetedRecipients":[1,4,2,3]}}}"""
def sortedArray : ScenarioBuilder = scenario("sorting an array")
.exec(http("test call")
.post("http://httpbin.org/anything")
.body(StringBody(data)).asJson
.check(
status.is(200),
jsonPath("$.json.data.sendMessage.targetedRecipients")
.find
.transform(_
.drop(1)
.dropRight(1)
.split(",")
.toVector
.sortWith(_<_)
)
.saveAs("received")
))
.exec(session => {
println(s"received: ${session("received").as[Vector[String]]}")
session
})