Jackson JsonSchema-在架构中将对象作为字符串

时间:2018-11-02 09:28:05

标签: java jackson jsonschema

我正在使用JSR 385 reference implementation中的SELECT dt.* FROM (SELECT c.id AS clients_id, c.name AS clients_name, s.id AS sites_id, s.url AS sites_url FROM clients AS c CROSS JOIN sites AS s ) AS dt LEFT JOIN clients_sites AS cs ON cs.clients_id = dt.clients_id AND cs.sites_id = dt.sites_id WHERE cs.id IS NULL -情况并非如此,只是想提一下子类型是通用的,我无法修改它。

这种情况是我正在使用Jackson JsonSchemaModule生成Json模式。 当前,我从该架构中收到的内容当然如下:

ComparableQuantity

Ofc,这不能给我太多帮助-它太具有表现力。 我已经有一个解析器,可以从字符串(带有验证)创建我的值并将其序列化为字符串(json中的10m将仅是“ 10 m”),并且我希望具有与模式相同的架构,例如:

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

我知道{ "weight": { "type": "string", "pattern": "[\\d,.]+\\s*(kg|t)", "required": true } } 可以和Jdk8JacksonModule类似,但是当我看到Optional时,我已经通过了-甚至不确定是否是寻找的正确地点。

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

我注意到的是,当我向架构序列化器(实际上是架构中的类序列化)添加SchemaFactoryWrapper#expectObjectFormat序列化模块时,它将返回

ComparableQuantity

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

任何例子都不错:)。

1 个答案:

答案 0 :(得分:1)

我已经完成了覆盖方法In [12]: df Out[12]: a date 0 prod1 2019/02/23 1 prod2 2999/01/02 In [13]: df.date.apply(pd.Period) Out[13]: 0 2019-02-23 1 2999-01-02 Name: date, dtype: object In [23]: df.date.apply(pd.Period)[1] Out[23]: Period('2999-01-02', 'D') 的调用JsonSerializer#acceptJsonFormatVisitor,并且要添加一个模式,我在visitor.expectStringFormat(type)的构造函数中添加了visitor

此访问者基于JsonSchemaGenerator,但是当然会取代com.fasterxml.jackson.module.jsonSchema.customProperties.ValidationSchemaFactoryWrapper而不是expectObjectFormat