Я разрабатываю Spring REST API.Одна из его конечных точек должна получать JSON с неизвестной структурой.Если быть точным, все JSON имеют общий заголовок, но внутренний документ отличается:
{
"receiveData": {
"iBusData": {
"requestUID": "11111111-2222-3333-4444-555555555555",
"messageKind": "PublishedData",
"sender": "ST-DELLIN-307",
"senderDateTime": "2018-10-15T09:09:09",
"typeName": "typeContractor",
"currentSenderApplication": "GP",
"objectUID": "09876543-rrrr-aaaa-nnnn-ddddddddddddd",
"data": {
"contractor": {
"uid": "09876543-rrrr-aaaa-nnnn-ddddddddddddd",
"name": "Test_Contractor",
"marked": false,
"code": "763764568763",
"isGroup": false,
"fullName": "Test_Contractor",
"INN": "Test_Contractor",
"personalIDKindName ": "Test_Contractor",
"personalIDSeries": "7634",
"personalIDNumber": "18-111111111",
"contractorCategory": "Test_Contractor",
"contractorOPF": "Test_Contractor",
"federalCategory": "Test_Contractor",
"regionalCategory": "Test_Contractor"
}
}
}
}
}
Полезная нагрузка поля data
может отличаться.Все эти вложенные документы (contractor
в приведенном выше примере) необходимо хранить в JSON-ориентированной базе данных RethinkDB
.
Как реализовать конечную точку, чтобы cat получал JSON с различной структурой в поле data
?
Теперь я решил проанализировать все JSON как HashMap:
public ResponseEntity<?> all(@RequestBody HashMap json)
разделить HashMap на заголовок и документ и сохранить в базе данных.Но есть некоторые трудности:
- Мне нужно выбрать сохраненные документы в том же формате, в котором они поступают в конечную точку
- Мне нужно сравнить вложенные документы с помощью
SHA256
и обновить их вбаза данных - Мне нужно добавить три пользовательских поля в документ перед сохранением в базе данных
Как все это сделать?