我正在使用JSR 385 reference implementation中的ComparableQuantity
-情况并非如此,只是想提到子类型是通用的,我无法对其进行修改。
情况是我正在用Jackson JsonSchemaModule生成Json模式。
当前,我从该架构中收到的内容当然如下所示:
{
"weight": {
"type": "object",
"id": "Mass>",
"required": true,
"properties": {
"value": {
"type": "number"
},
"unit": {
"type": "object",
"id": "Mass>",
"properties": {
"name": {
"type": "string"
},
...
}
}
}
}
}
Ofc,这并不能给我太多帮助-它太具有表现力。
我已经有一个解析器,可以从字符串(带有验证)创建我的值,并将其序列化为字符串(json中的10m将仅是“ 10 m”),并且我希望具有与模式相同的架构,例如:
{
"weight": {
"type": "string",
"pattern": "[\\d,.]+\\s*(kg|t)",
"required": true
}
}
我知道
Jdk8JacksonModule
可以使Optional
与之相似,但是当我看到Jdk8OptionalBeanPropertyWriter
时,我已经通过了-甚至不确定它是否是寻找的正确地方。另外,我认为可以使用
ObjectMapper$acceptJsonFormatVisitor
,也许可以使用SchemaFactoryWrapper#expectObjectFormat
-不确定。我注意到的是,当我将
ComparableQuantity
序列化模块添加到模式序列化器(实际上是模式中的类序列化)时,它将返回{
"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/