Как я могу сгенерировать определение OpenAPI, которое поддерживает полиморфический корпус запроса, и может соответствующJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу сгенерировать определение OpenAPI, которое поддерживает полиморфический корпус запроса, и может соответствующ

Сообщение Anonymous »

Допустим, у меня есть API Spring Boot Rest со следующей конечной точкой и определенными моделями (Getters/Setters опущены для краткости)

Код: Выделить всё

@JsonTypeInfo( property = "type", include = JsonTypeInfo.As.PROPERTY, use = JsonTypeInfo.Id.NAME )
@JsonSubTypes( { @JsonSubTypes.Type( FooWidget.class ), @JsonSubTypes.Type( BarWidget.class ) } )
public interface Widget {}

public class BarWidget implements Widget { private String bar; }

public class FooWidget implements Widget { private String foo; }

public class WidgetGroup
{
private List widgets;
}

@RestController
public class WidgetController
{
@PostMapping( "/widgets" )
public void createWidgets( @RequestBody WidgetGroup widgets )
{
}
}
Is it possible to express this in an OpenAPI spec so that a generator could both
  • reproduce the above code as server stubs and models
  • produce a Javascript client which correctly represented the models and API
Having set this up and tried both springdoc и Springfox, чтобы генерировать мне спецификацию из кода, я не смог изменить процесс - приведенный выше код генерирует следующую спецификацию с помощью SpringDoc: < /p>
openapi: 3.0.1
info:
title: OpenAPI definition
version: v0
servers:
- url: 'http://localhost:8080'
description: Generated server url
paths:
/widgets:
post:
tags:
- widget-controller
operationId: createWidgets
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WidgetGroup'
required: true
responses:
'200':
description: OK
components:
schemas:
BarWidget:
type: object
allOf:
- $ref: '#/components/schemas/Widget'
- type: object
properties:
bar:
type: string
FooWidget:
type: object
allOf:
- $ref: '#/components/schemas/Widget'
- type: object
properties:
foo:
type: string
Widget:
required:
- type
type: object
properties:
type:
type: string
discriminator:
propertyName: type
WidgetGroup:
type: object
properties:
widgets:
type: array
items:
oneOf:
- $ref: '#/components/schemas/BarWidget'
- $ref: '#/components/schemas/FooWidget'
< /code>
При использовании генераторов Java и JavaScript информация о наследстве, кажется, теряется, и сгенерируется нечетные классы, такие как «Barwidgetallof». Является ли это ограничением в выразительности спецификации ОАС или просто ограничением в реализации генераторов (я попробовал как с помощью сваггер-кодгена, так и генераторов OpenApitools)?

Подробнее здесь: https://stackoverflow.com/questions/634 ... request-bo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»