Схемы подтипов не генерируются, если моя модель Джексона (базовый/родительский класс) не использует аннотацию @JsonSubTypes или @Schema(subTypes = ...) для объявления всех дочерних типов.Схемы подтипов не создаются. >
Но я не могу добавить эту аннотацию, поскольку во время выполнения (во время запуска) с помощью сопоставителя объектов Джексона регистрируется больше подтипов.
Это делается с помощью Spring Bean, который создает модуль Джексона. это выполняет сканирование пути к классам для типов модели (в основном оно сканирует классы с аннотацией JsonTypeName).
Можно ли добавить эту информацию о наследовании с помощью API Springdoc и/или API Swagger?
data class SubtypesRequest(val elements: List)
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
@JsonTypeName("parent")
open abstract class Parent(val name: String)
@JsonTypeName("childX")
@Schema(allOf = [Parent::class])
class ChildX(name: String, val x: String) : Parent(name)
@JsonTypeName("childY")
@Schema(allOf = [Parent::class])
class ChildY(name: String, val y: String) : Parent(name)
Приведенный выше код генерирует схему только для типа Parent, поскольку похоже, что Springdoc/swagger не знает (не может знать) о подтипах ChildX
Приведенный выше код генерирует схему только для типа Parent, поскольку похоже, что Springdoc/swagger не знает (не может знать) о подтипах ChildX
код>, ДетскийY. Но на самом деле это должны быть типы ChildX и ChildY, которые разрешены в качестве типов для элементов списка.
Parent:
required:
- name
- type
type: object
properties:
name:
type: string
type:
type: string
discriminator:
propertyName: type
SubtypesRequest:
required:
- elements
type: object
properties:
elements:
type: array
items:
$ref: '#/components/schemas/Parent'
С аннотированными подтипами это работает
data class SubtypesRequest(val elements: List)
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
@JsonSubTypes(
JsonSubTypes.Type(value = ChildX::class, name = "childX"),
JsonSubTypes.Type(value = ChildY::class, name = "childY"),
)
@Schema(subTypes = [ChildX::class, ChildY::class])
@JsonTypeName("parent")
open abstract class Parent(val name: String)
@JsonTypeName("childX")
@Schema(allOf = [Parent::class])
class ChildX(name: String, val x: String) : Parent(name)
@JsonTypeName("childY")
@Schema(allOf = [Parent::class])
class ChildY(name: String, val y: String) : Parent(name)
ChildX:
required:
- name
- x
type: object
allOf:
- $ref: '#/components/schemas/Parent'
- type: object
properties:
x:
type: string
ChildY:
required:
- name
- 'y'
type: object
allOf:
- $ref: '#/components/schemas/Parent'
- type: object
properties:
'y':
type: string
Parent:
required:
- name
- type
type: object
properties:
name:
type: string
type:
type: string
discriminator:
propertyName: type
SubtypesRequest:
required:
- elements
type: object
properties:
elements:
type: array
items:
oneOf:
- $ref: '#/components/schemas/ChildX'
- $ref: '#/components/schemas/ChildY'
Я пробовал вручную создавать объекты Schema и регистрировать их в OpenAPI во многих различных вариантах, но без каких-либо результатов. Ниже представлена лишь одна из последних попыток.
@Configuration
class OpenApiConfiguration {
@Bean
fun openApi(): OpenAPI {
val api = OpenAPI()
val parent = ModelConverters.getInstance().read(Parent::class.java)
val childX = ModelConverters.getInstance().read(ChildX::class.java)
val childY = ModelConverters.getInstance().read(ChildY::class.java)
api.schema("Parent", parent.values.first())
api.schema("ChildX", childX.values.first())
api.schema("ChildY", childY.values.first())
return api
}
}
Подробнее здесь: https://stackoverflow.com/questions/760 ... ed-with-js
Подтипы не генерируются в схеме, если базовый класс не аннотирован @JsonSubTypes. ⇐ JAVA
Программисты JAVA общаются здесь
1729771815
Anonymous
Схемы подтипов не генерируются, если моя модель Джексона (базовый/родительский класс) не использует аннотацию @JsonSubTypes или @Schema(subTypes = ...) для объявления всех дочерних типов.Схемы подтипов не создаются. >
Но я не могу добавить эту аннотацию, поскольку во время выполнения (во время запуска) с помощью сопоставителя объектов Джексона регистрируется больше подтипов.
Это делается с помощью Spring Bean, который создает модуль Джексона. это выполняет сканирование пути к классам для типов модели (в основном оно сканирует классы с аннотацией JsonTypeName).
[b]Можно ли добавить эту информацию о наследовании с помощью API Springdoc и/или API Swagger? [/b]
data class SubtypesRequest(val elements: List)
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
@JsonTypeName("parent")
open abstract class Parent(val name: String)
@JsonTypeName("childX")
@Schema(allOf = [Parent::class])
class ChildX(name: String, val x: String) : Parent(name)
@JsonTypeName("childY")
@Schema(allOf = [Parent::class])
class ChildY(name: String, val y: String) : Parent(name)
Приведенный выше код генерирует схему только для типа Parent, поскольку похоже, что Springdoc/swagger не знает (не может знать) о подтипах ChildX
Приведенный выше код генерирует схему только для типа Parent, поскольку похоже, что Springdoc/swagger не знает (не может знать) о подтипах ChildX
код>, ДетскийY. Но на самом деле это должны быть типы ChildX и ChildY, которые разрешены в качестве типов для элементов списка.
Parent:
required:
- name
- type
type: object
properties:
name:
type: string
type:
type: string
discriminator:
propertyName: type
SubtypesRequest:
required:
- elements
type: object
properties:
elements:
type: array
items:
$ref: '#/components/schemas/Parent'
С аннотированными подтипами это работает
data class SubtypesRequest(val elements: List)
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type"
)
@JsonSubTypes(
JsonSubTypes.Type(value = ChildX::class, name = "childX"),
JsonSubTypes.Type(value = ChildY::class, name = "childY"),
)
@Schema(subTypes = [ChildX::class, ChildY::class])
@JsonTypeName("parent")
open abstract class Parent(val name: String)
@JsonTypeName("childX")
@Schema(allOf = [Parent::class])
class ChildX(name: String, val x: String) : Parent(name)
@JsonTypeName("childY")
@Schema(allOf = [Parent::class])
class ChildY(name: String, val y: String) : Parent(name)
ChildX:
required:
- name
- x
type: object
allOf:
- $ref: '#/components/schemas/Parent'
- type: object
properties:
x:
type: string
ChildY:
required:
- name
- 'y'
type: object
allOf:
- $ref: '#/components/schemas/Parent'
- type: object
properties:
'y':
type: string
Parent:
required:
- name
- type
type: object
properties:
name:
type: string
type:
type: string
discriminator:
propertyName: type
SubtypesRequest:
required:
- elements
type: object
properties:
elements:
type: array
items:
oneOf:
- $ref: '#/components/schemas/ChildX'
- $ref: '#/components/schemas/ChildY'
Я пробовал вручную создавать объекты Schema и регистрировать их в OpenAPI во многих различных вариантах, но без каких-либо результатов. Ниже представлена лишь одна из последних попыток.
@Configuration
class OpenApiConfiguration {
@Bean
fun openApi(): OpenAPI {
val api = OpenAPI()
val parent = ModelConverters.getInstance().read(Parent::class.java)
val childX = ModelConverters.getInstance().read(ChildX::class.java)
val childY = ModelConverters.getInstance().read(ChildY::class.java)
api.schema("Parent", parent.values.first())
api.schema("ChildX", childX.values.first())
api.schema("ChildY", childY.values.first())
return api
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/76072648/subtypes-are-not-generated-into-schema-when-base-class-is-not-annotated-with-js[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия