我想通过KafkaRest代理产生一个Kafka主题。我已经在模式注册表中创建了一个JSON模式,我希望所有消息都根据注册的模式进行验证,如果它们与模式不匹配,则拒绝。
我的模式
{
"type": "object",
"properties": {
"foo": {
"type": "string",
},
"bar": {
"type": "number"
}
}
}
此架构已正确注册并分配了版本1。然后我尝试为foo
和bar
生成一个数据类型错误的消息,但是消息被接受。
curl --location --request POST 'http://localhost:8082/topics/test' \
--header 'Content-Type: application/vnd.kafka.jsonschema.v2+json' \
--header 'Accept: application/vnd.kafka.v2+json' \
--data-raw '{
"value_schema_id": 1,
"records": [
{
"value": {
"foo": 10,
"bar":"not a number"
}
}
]
}'
请注意,我正在生成一个与模式关联的测试
主题,但是错误消息get无论如何都会被接受。我还尝试添加
“value\u schema\u id”:1
,以确保有效负载中引用了该模式,但仍然接受错误消息。
但是,如果我将JSON模式传递为
value_schema
,它会按预期工作
{
"value_schema": "{\"type\": \"object\",\"properties\": {\"foo\": {\"type\": \"string\"},\"bar\": {\"type\": \"number\"}}}",
"records": [
{
"value": {
"foo": "10",
"bar": "1"
}
}
]
}
回答
{
"error_code": 42203,
"message": "Conversion of JSON to Object failed: Failed to convert JSON using JSON Schema: #/bar: expected type: Number, found: String"
}
问题:在生成消息时是否可以引用现有的模式id,而不必每次都传递整个JSON模式?
是的,有可能。您必须按照以下要求将其启用为值、键或两者:
confluent.value.schema.validation=true
confluent.key.schema.validation=true
此外,在JSON请求中,您可以指定模式的ID。以下面的例子为例,来说明我所说的:
{
"key_schema_id": 1234,
"value_schema_id: 56789,
"records": [
{
"key": "key123",
"value": "my_simple_string_value_example"
}
]
}
在哪里:
key_schema_id
是架构注册表中键架构的ID。通过为其设置适当的值,将保证只接受具有与该ID标识的架构兼容的密钥的消息。
同样:
value_schema_id
是架构注册表中值架构的ID。通过设置适当的值,它将保证只接受具有与该ID标识的模式兼容的值的消息。
希望这能给我们带来一些启示。
干杯
爱德华多·庞佐尼
我正在使用Spring数据卡桑德拉连接到我的卡桑德拉数据库。我已经创建了实体java对象(带有@Table注释),以便从数据库中进行一些简单的提取。 我想知道如何在启动时进行模式验证,比如像在Hibernate中那样。 请注意,我阅读了有关查询验证的信息,但我对验证表名和列名感兴趣。
根据Avro模式规范(适用于接头):https://avro.apache.org/docs/current/spec.html 如上所述,Unions使用JSON数组表示。例如,["null","string"]声明一个模式,该模式可以是null或string。 ( 请注意,当为类型为联合的记录字段指定默认值时,默认值的类型必须与联合的第一个元素匹配。 因此,对于包含“null”的联合,通常首先
我试图使用另一个JSON模式来验证JSON模式。 要验证的JSON模式示例:https://jsonschema.net/home 验证上述模式的验证模式参考:https://github.com/ajv-validator/ajv/blob/master/lib/refs/json-schema-draft-07.json 从上面的中,如果我删除,我的JSON将变得无效。 我有什么方法可以定义根
我在验证JSON时遇到了一些错误。我无法理解这些错误,有人能帮我解释一下吗。 } 这是json。 消息:JSON与“anyOf”中的任何模式都不匹配。架构路径: 消息:无效类型。应为数组,但得到的是字符串。架构路径: 消息:值“标识”载体“未在枚举中定义。架构路径: 消息:字符串“uui # abb 0 ef 56-8562-4056-aa62-AFB 758 a 150 ad”未根据格式“uri
问题内容: 我使用Spring 4.3.3.RELEASE,Hibernate 5.2.2.Final,数据库是MySQL。我想尝试一下 strategy = GenerationType.TABLE 。正如我对 GenerationType.SEQUENCE 所知, 我需要数据库中的序列来生成ID。 这是我的实体。 Spring注解配置 Spring xml配置 当我运行我的应用程序时,我得到
我有一个表单,如果复选框为false,则使用ng必需指令对文本输入进行验证。如果复选框为true,则该字段将被隐藏并且ng必需设置为false。 问题是,我在输入上还指定了一个用于验证的正则表达式,并且使用了ng模式角度指令。我遇到的问题是,如果用户填写了无效的电话号码,请选中该框以停用该输入(因此无需进一步验证),表单将不允许提交,因为它基于ng模式无效。 我试图通过添加一个ng change函