Jackson JsonSchema - Объект в виде строки в схеме - PullRequest
0 голосов
/ 02 ноября 2018

Я использую ComparableQuantity из Ссылочная реализация JSR 385 - это не тот случай, просто хочу упомянуть, что подтип является общим, и я не могу его изменить.

Дело в том, что я генерирую схему Json с Jackson JsonSchemaModule . В настоящее время, что я получаю от этой схемы, конечно, что-то вроде ниже:

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

Ofc, это не дает мне много - это слишком выразительно. У меня уже есть синтаксический анализатор, который может создавать мои значения из строки (с проверкой) и сериализовать его также в строку (10 м будет в json просто "10 м"), и я хотел бы иметь ту же схему, например, с шаблоном :

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

Я знаю, что Jdk8JacksonModule может сделать что-то похожее с Optional, но когда я увидел Jdk8OptionalBeanPropertyWriter, я прошел - даже не уверен, что это правильное место для поиска.

Кроме того, я думаю, что можно использовать ObjectMapper$acceptJsonFormatVisitor, может быть, что-то с SchemaFactoryWrapper#expectObjectFormat - не уверен.

Что я заметил, так это то, что когда я добавляю ComparableQuantity модуль сериализации в сериализатор схемы (который на самом деле является сериализацией классов из схемы), он возвращает

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

так может это какой-то путь ...

Любой пример был бы хорош:).

1 Ответ

0 голосов
/ 03 ноября 2018

Я закончил с методом переопределения JsonSerializer#acceptJsonFormatVisitor, где я вызываю visitor.expectStringFormat(type), а также, чтобы добавить шаблон, который я добавил visitor в конструктор JsonSchemaGenerator.

Этот посетитель базируется на com.fasterxml.jackson.module.jsonSchema.customProperties.ValidationSchemaFactoryWrapper, но вместо expectObjectFormat переопределяет expectStringFormat, конечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...