如何使用 Kotlin、MongoDB 和 Jsonschema "oneof" 获得正确的 Class 类型
How to get correct Type of a Class using Kotlin,MongoDB and Jsonschema "oneof"
我们正在使用消息队列来获取一些事件。这些事件被描述为这样的 json 模式。
{
"title": "Partner",
"type": "object",
"properties": {
"partnerID": {
"type": "string",
"examples": [
"0001038645"
]
},
"partnerTyp": {
"type": "string",
"enum": [
"NATPERS",
"PAAR",
"SONST-JURIST"
],
"examples": [
"SONST-JURIST"
]
},
"name": {
"oneOf": [
"vorname": {
"type": "string",
"examples": [
"Bernd"
]
},
"nachname": {
"type": "string",
"examples": [
"Wernersen"
]
},
},
{
"vorname1": {
"type": "string",
"examples": [
"Bernd"
]
},
},
{
"nameExtern": {
"type": "string",
"examples": [
"Internationale Pinsel Manufaktur Gesellschaft mbH"
]
},
}
]
}
}
描述
这意味着我们可以拥有三种不同类型的合作伙伴,这也会在 kotlin 中产生不同的 classes。我们想将它们保存在我们的数据库中 (mongodb)。
稍后我们希望通过 REST 将它们转移到另一个应用程序。
问题
我们现在遇到的问题是,当我们从事件中获取消息时,我们不知道如何确定我们需要在数据库中保存哪种类型。
在其他项目中,我们有类似的东西
message.getBody(messageClass)
但是如何在这个事件中得到正确的消息 class with Information 呢?
以及稍后我们如何从数据库中获取正确类型的更多信息。
interface ContractRepository : MongoRepository<Partner, String> {
override fun deleteAll()
}
Partner 可以是一个抽象的 class 什么时候 spring 数据如何知道要使用什么是正确的实现?
everit-org/json-schema
库有一个名为 ValidationListener 的功能,它在验证期间报告事件,包括 "oneOf"
子模式匹配,因此它可能为您提供足够的信息来确定消息 class.
更准确地说,如果您 运行 配置了 ValidationListener
的验证,您将收到一个 #combinedSchemaMatch(CombinedSchemaMatchEvent)
事件,并且该事件的 #getSchema()
将 return 包装 "oneOf"
,而 #getSubSchema()
将 return 实际匹配的子模式(它将告诉您消息 class)。
该库是用 java 编写的,因此您可以在 kotlin 中使用它。
免责声明:我是库的维护者。
我们正在使用消息队列来获取一些事件。这些事件被描述为这样的 json 模式。
{
"title": "Partner",
"type": "object",
"properties": {
"partnerID": {
"type": "string",
"examples": [
"0001038645"
]
},
"partnerTyp": {
"type": "string",
"enum": [
"NATPERS",
"PAAR",
"SONST-JURIST"
],
"examples": [
"SONST-JURIST"
]
},
"name": {
"oneOf": [
"vorname": {
"type": "string",
"examples": [
"Bernd"
]
},
"nachname": {
"type": "string",
"examples": [
"Wernersen"
]
},
},
{
"vorname1": {
"type": "string",
"examples": [
"Bernd"
]
},
},
{
"nameExtern": {
"type": "string",
"examples": [
"Internationale Pinsel Manufaktur Gesellschaft mbH"
]
},
}
]
}
}
描述
这意味着我们可以拥有三种不同类型的合作伙伴,这也会在 kotlin 中产生不同的 classes。我们想将它们保存在我们的数据库中 (mongodb)。
稍后我们希望通过 REST 将它们转移到另一个应用程序。
问题
我们现在遇到的问题是,当我们从事件中获取消息时,我们不知道如何确定我们需要在数据库中保存哪种类型。
在其他项目中,我们有类似的东西
message.getBody(messageClass)
但是如何在这个事件中得到正确的消息 class with Information 呢?
以及稍后我们如何从数据库中获取正确类型的更多信息。
interface ContractRepository : MongoRepository<Partner, String> {
override fun deleteAll()
}
Partner 可以是一个抽象的 class 什么时候 spring 数据如何知道要使用什么是正确的实现?
everit-org/json-schema
库有一个名为 ValidationListener 的功能,它在验证期间报告事件,包括 "oneOf"
子模式匹配,因此它可能为您提供足够的信息来确定消息 class.
更准确地说,如果您 运行 配置了 ValidationListener
的验证,您将收到一个 #combinedSchemaMatch(CombinedSchemaMatchEvent)
事件,并且该事件的 #getSchema()
将 return 包装 "oneOf"
,而 #getSubSchema()
将 return 实际匹配的子模式(它将告诉您消息 class)。
该库是用 java 编写的,因此您可以在 kotlin 中使用它。
免责声明:我是库的维护者。