我开发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的经验,所以我不能在这里提供实现。