Как добавить атрибут описания при генерации схемы JSON из POJO с использованием классов пакета codehaus - PullRequest
1 голос
/ 25 октября 2019

Я намерен преобразовать мои POJO s в JSON Schema.

. В существующих POJO s у нас есть аннотации из пакета codehaus: @JsonProperty("address"), где соответствующий импорт:

import org.codehaus.jackson.annotate.JsonProperty;

Я не могу использовать codehaus api для генерации схемы, так как у нас есть рекурсивная структура JSON, и я получаю StackOverflowError.

Итак, я попытался использоватьfasterxml jackson-module-jsonschema API, чтобы сделать это, что работает нормально.

Пример вывода, который я получаю:

"Registration" : {
      "type" : "object",
      "id" : "urn:jsonschema:com:xyz.abc.Address",
}

У меня есть два требования:

  • Помимо «type» и «id», я также хочу иметь атрибут description. Я могу добавить атрибут @JsonPropertyDescription, который будет работать, но тогда каждое свойство будет иметь одну аннотацию из codehaus и другую из пакета fasterxml. Есть ли в codehaus эквивалентная аннотация, которая может быть использована для этой цели?

  • Есть ли способ иметь только неквалифицированное имя класса в атрибуте "id" (только«Адрес», т.е. без уточненного пути к объекту «xyz.abc.Address» и без «urn: jsonschema»)?

Код для генерации схемы с использованием fasterxml:

ObjectMapper mapper = new ObjectMapper();
JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper);
JsonSchema schema = schemaGen.generateSchema(DashboardDef.class);
String generatedJsonSchema = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);

1 Ответ

0 голосов
/ 26 октября 2019

Если это возможно, просто замените аннотацию codehaus на fasterxml. codehaus больше не поддерживается и его следует избегать. Для получения дополнительной информации посмотрите: org.codehaus.jackson против com.fasterxml.jackson.core .

Если вы действительно хотите погрузиться в проект с этими двумя библиотеками, вы должны взятьпосмотрите на класс AnnotationIntrospector , который позволяет выполнять дополнительную настройку и связывать множество различных библиотек с инфраструктурой Jackson. См. Аналогичный вопрос: Как заставить fastxml ObjectMapper работать с аннотациями codehaus .

Для манипулирования JSON Schema вы можете реализовать свой собственный SchemaFactoryWrapper . См. Также:

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

...