Json-consumer-interceptor#

Реализует интерфейс ConsumerInterceptor, позволяет фильтровать поля JSON при помощи языка запросов JsonPath.

Предусловия#

Интерсептор не работает с массивами, вложенными в массивы.

Если поле присутствует в списке необходимых полей для фильтрации, но отсутствует в исходном JSON-поле будет добавлено со значением null.

Последовательность выполнения#

Подключение к Kafka Consumer#

  1. Добавить актуальную версию интерсептора в зависимости проекта.

  2. Создать конфигурационный файл со списком полей для фильтрации в соответствии с примером.

  3. Добавить настройки перехватчика к настройкам kafka-клиента в соответствии с примером.

Примеры конфигурации#

Конфигурация файла со списком необходимых полей#

paths: [
  "$['requestChainUid']",
  "$['table']['id', 'addressData', 'deliveryChannel', 'messageDetails', 'messageString', 'subject', 'nodeIdent']",
  "$['operation']['type', 'tranAmount', 'tranCurrency', 'sicCode', 'docId']",
  "$['card']['cardBalance', 'cardCurrency', 'cardDateClose']"
  "$['client']['clientITN', 'type']"
  "$['absent']"
]

Конфигурация Kafka Consumer#

...
# 1) Подключить interceptor
interceptor.classes=ru.sbt.ss.kafka.clients.consumer.FilterInterceptor

# 2) Указать путь до конфигурационного файла со списком необходимых полей

# Загрузка из файловой системы
interceptor.json.config=/users/test/kafka/json-interceptor/data/valid_json_path.conf
# Загрузка из classpath
# interceptor.json.config=classpath://json-interceptor/data/valid_json_path.conf

Пример конфигурации:

interceptor.json.config.root.dir=/full/path/to
# interceptor.config.root.dir=/full/path/to

# /full/path/to/data/valid_json_path.conf
interceptor.json.config=data/valid_json_path.conf

Пример фильтрации полей JSON#

Исходный JSON:

{
  "requestChainUid":"W4PRIM00000000000001296291933780",
  "table":{
    "id":1296291933780,
    "usageActionOid":159761923680,
    "addressData":null,
    "deliveryChannel":"SBRF_R",
    "code":null,
    "dateFrom":"2020-08-13 07:50:45",
    "dateTo":"2100-01-01 00:00:00",
    "messageDetails":null,
    "messageString":"",
    "messageTemplate":2744495830,
    "status":"P",
    "sendingChannel":null,
    "sendingDate":null,
    "sendingDetails":null,
    "refNumber":null,
    "subject":null,
    "priority":0,
    "groupNumber":0,
    "nodeIdent":"W4PRIM"
  },
  "operation":{
    "type":"A",
    "cardNumber":"",
    "tranAmount":5250,
    "tranCurrency":"RUR",
    "tranTime":"2020-08-13 07:50:44",
    "authCode":"206197",
    "tranType":"AD",
    "replyCode":"0",
    "merchant":"P2P_byphone_Tinkoff-Bank",
    "authType":"ABP0010",
    "cardBalance":180689921,
    "cardCurrency":"RUR",
    "commissionAmount":0,
    "tranId":null,
    "paymentId":null,
    "postpone":null,
    "sourceRegNum":"",
    "clientITN":null,
    "sourceNumber":"BPWWW000",
    "sicCode":null,
    "docId":"290945056960",
    "cardCreditLimit":null,
    "lockoutCode":null,
    "cardStatus":null,
    "cardsClient":null
  },
  "card":{
    "cardBalance":180689921,
    "cardCurrency":"RUR",
    "rbsNumber":null,
    "cardStatus":null,
    "prevCardNumber":null,
    "product":null,
    "cardExpire":null,
    "contractNumber":null,
    "tokenReferenceID":null,
    "cardDateOpen":null
  },
  "message":null,
  "client":{
    "clientITN":null,
    "clientWayId":null,
    "cardsClient":null,
    "regNumber":null,
    "lastName":null,
    "firstName":null,
    "middleName":null,
    "birthDate":null,
    "gender":null
  }
}

JSON после фильтрации полей:

{
  "requestChainUid":"w4prim|MSG0000000001296291924510",
  "client":{
    "clientITN":"1117810202007100204",
    "type":null
  },
  "operation":{
    "type":"F",
    "tranAmount":6000,
    "tranCurrency":"RUR",
    "sicCode":null,
    "docId":"290944991820"
  },
  "table":{
    "id":1296291924510,
    "addressData":"10 02 210399",
    "deliveryChannel":"KF550-BALANCE",
    "messageDetails":null,
    "messageString":"",
    "subject":null,
    "nodeIdent":"w4prim|MSG"
  },
  "card":{
    "cardBalance":16700,
    "cardCurrency":"RUR",
    "cardDateClose":null
    },
  "absent": null
}

Загрузка конфигурации/схем из classpath#

Для загрузки конфигурации/схем из classpath необходимо указать протокол classpath:// в пути до файла, например:

  • для файла конфигурации: interceptor.json.config=classpath://json-interceptor/data/valid_json_path.conf

Относительные пути в конфигурации#

Относительные пути до файлов в конфигурации обычно разрешаются относительно директории запуска приложения.

В некоторых случаях (для автоматических установок, например, для установок с помощью скриптов) может быть полезно явно указать root-директорию, относительно которой будут разрешаться относительные пути:

  • interceptor.config.root.dir (общая для всех интерсепторов с подобной настройкой);

  • interceptor.json.config.root.dir (переопределяет общую настройку).

Данная настройка не применяется к путям в classpath (classpath://path/to/file.txt)

Результат#

Выполнено подключение интерсептора Json-consumer-interceptor.