JsonPathExtract#

Действие JsonPathExtract позволяет извлекать содержимое элемента JSON объекта с использованием нотации JSON-path (документация на библиотеку приведена на сайте, для проверки JsonPass рекомендуется воспользоваться ссылкой http://jsonpath.herokuapp.com/.

Параметры:

Название

Обязательность

Допустимые значения

Описание

path

+

Строка

Выражение json-path, обязательный параметр

expectedResult

-

Имя java-класса либо auto

Имя java класса, соответствующего ожидаемому результату, по умолчанию java.lang.String. В случае указания auto - определяется автоматически.

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-объект (строку/примитив).