Spring Boot和RethinkDB保存未知结构的JSON



我开发SpringREST 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接收data字段中不同结构的JSON的端点?

现在我想把所有的JSON解析为HashMap:

public ResponseEntity<?> all(@RequestBody HashMap json)

将HashMap拆分为标头和文档,并存储在数据库中。但也有一些困难:

  • 我需要选择与到达端点时相同格式的存储文档
  • 我需要使用SHA256比较嵌套文档,并在数据库中更新它们
  • 在存储到数据库中之前,我需要向文档添加三个自定义字段

如何做到这一切?

您可以为具有公共字段的主体创建一个类[您调用一个头]。

请求主体类

class MyRequest {
BusData iBusData;
}

类以保存动态数据

class BusData {
String requestUID;
String messageKind;
// other fields
// unknown json structure
HashMap<String, Object> data;
}

当你收到这种类型的请求体时,插入reThinkDB-我认为你可以迭代hashmap中的键/值,并确定该值是否是另一个对象,然后递归迭代,构建一个查询
在递归过程中,您可能需要通过引用方法来传递querybuilder部分。

我没有rethinkdb的经验,所以我不能在这里提供实现。

最新更新