JsonPathExtract#
Действие JsonPathExtract позволяет извлекать содержимое элемента JSON объекта с использованием нотации JSON-path (документация на библиотеку приведена на сайте, для проверки JsonPath рекомендуется воспользоваться ссылкой http://jsonpath.herokuapp.com/).
Параметры:
Название |
Обязательность |
Допустимые значения |
Описание |
|---|---|---|---|
path |
+ |
Строка |
Выражение json-path, обязательный параметр |
expectedResult |
- |
Имя java-класса либо |
Имя java класса, соответствующего ожидаемому результату, по умолчанию |
allowNotFound |
- |
true/false |
В случае указания значения true, если искомый элемент не найден, то возвращается пустая строка. Иначе выдается ошибка. По умолчанию — true. |
expressions |
- |
Список значений |
Параметр, аналогичный path, указанный в виде списка. |
varReplace |
- |
Строка |
Список переменных, которые нужно вычислить и заменить в expressions и path. |
allowNotFound |
- |
true/false |
В случае указания значения true игнорируется ошибка о том, что не найден результат при поиске. |
toJson |
- |
true/false |
Конвертировать результат в JSON объект (примитив). |
Пример: |
service:
service_static:
- id: 1
url: /sample
listen:
- port: 8083
chains:
request_chains:
- actions:
- action: JsonPathExtract
params:
path: "$.address.streetAddress"
actions:
- action: SetVarFromMessage
params:
variable: $clj_street
message: $clj_request_body
optional:
response_body: "OK"
response_code: 200
response_headers:
- name: X-Header
value: "$clj_street"
В приведенном примере из приходящего в теле запроса извлекается JSON элемент streetAddress, далее результат передается в действие SetVarFromMessage, в котором его значение помещается в переменную clj_street. Данная переменная используется для заполнения заголовка X-Header, который возвращается клиенту в ответе.
Важные замечания:
В зависимости от того, указан параметр toJson в значении true или false и типа получаемого объекта, результат имеет разный вид:
Если результат имеет строковый тип, то при
toJson = true, формируется json-строка (строковое значение в кавычках, символы внутри, требующие экранирования будут экранированы).Если результат - примитив, то записывается примитив, преобразованный в строку/json-объект.
Если результат - json-объект, то при
toJson = falseрезультат сериализуется как java объект, т.е. если результат {«name»: «value»}, то на выходе получим {name=value}, при toJson = {«name»: «value»}.Если результат - список, то формируются отдельные сообщения на каждый элемент, при этом сами элементы формируются следующим образом:
если строка, то в зависимости от значения параметра
toJsonрезультат будет строка или json-строка;если примитив, то в зависимости от значения параметра
toJsonрезультат будет примитив или json-примитив;если объект, то при значении
toJson = false, каждая пара ключ-значение формирует сообщение с id = ключ, и содержимым равным преобразованным в строку значением (как java объект). При значенииtoJson = trueсообщение содержит json-объект (строку/примитив).