Spring Boot и RethinkDB сохраняют JSON с неизвестной структурой - PullRequest
0 голосов
/ 08 декабря 2018

Я разрабатываю 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 и обновить их вбаза данных
  • Мне нужно добавить три пользовательских поля в документ перед сохранением в базе данных

Как все это сделать?

...