Json-consumer-interceptor#
Реализует интерфейс ConsumerInterceptor, позволяет фильтровать поля JSON при помощи языка запросов JsonPath.
Предусловия#
Интерсептор не работает с массивами, вложенными в массивы.
Если поле присутствует в списке необходимых полей для фильтрации, но отсутствует в исходном JSON-поле будет добавлено со значением null.
Последовательность выполнения#
Подключение к Kafka Consumer#
Добавить актуальную версию интерсептора в зависимости проекта.
Создать конфигурационный файл со списком полей для фильтрации в соответствии с примером.
Добавить настройки перехватчика к настройкам 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.