我正在使用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/

10-13 03:35