gpt4 book ai didi

java - Jackson JsonSchema - 模式中作为字符串的对象

转载 作者:行者123 更新时间:2023-11-30 05:56:15 26 4
gpt4 key购买 nike

我正在使用 JSR 385 reference implementation 中的 ComparableQuantity - 这不是一个案例,只是想提一下子类型是通用的,我无法修改它。

情况是我正在生成一个 Json 模式 Jackson JsonSchemaModule 。目前,我从该模式收到的内容当然如下所示:

{
"weight": {
"type": "object",
"id": "Mass>",
"required": true,
"properties": {
"value": {
"type": "number"
},
"unit": {
"type": "object",
"id": "Mass>",
"properties": {
"name": {
"type": "string"
},
...
}
}
}
}
}

Ofc,这并没有给我带来太多——它太具有表现力了。我已经有一个解析器,它可以从字符串(带验证)创建我的值并将其序列化为字符串(10m 将在 json 中只是“10 m”),并且我希望拥有相同的模式,例如带有模式:

{
"weight": {
"type": "string",
"pattern": "[\\d,.]+\\s*(kg|t)",
"required": true
}
}

我知道Jdk8JacksonModule可以做出与Optional类似的东西,但是当我看到Jdk8OptionalBeanPropertyWriter时,我已经通过了 - 即使不确定是否它是寻找正确的地方。

此外,我认为可以使用 ObjectMapper$acceptJsonFormatVisitor,也许可以使用 SchemaFactoryWrapper#expectObjectFormat - 不确定。

我注意到,当我将 ComparableQuantity 序列化模块添加到 Schema 序列化程序(实际上是来自 schema 的类序列化)时,它将返回

{
"weight": {
"type": "any",
"required": true
}
}

所以也许这是某种方式......

任何例子都很好:)。

最佳答案

我已经完成了重写方法JsonSerializer#acceptJsonFormatVisitor,其中我调用了visitor.expectStringFormat(type),并且还添加了一个模式,我添加了visitor JsonSchemaGenerator 的构造函数中。

此访问者基于 com.fasterxml.jackson.module.jsonSchema.customProperties.ValidationSchemaFactoryWrapper,但当然不是 expectObjectFormat 覆盖 expectStringFormat .

关于java - Jackson JsonSchema - 模式中作为字符串的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53115856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com