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

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

Сообщение Anonymous »

Предположим, у меня есть REST API Spring Boot со следующей конечной точкой и определенными моделями (геттеры/сеттеры опущены для краткости)

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

@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 )
{
}
}
Можно ли выразить это в спецификации OpenAPI, чтобы генератор мог
  • воспроизводить приведенный выше код в виде серверных заглушек и моделей
  • создавать клиент Javascript, который правильно представлял модели и API
Настроив это и попробовав Springdoc и Springfox сгенерировать мне спецификацию из кода, Тогда мне не удалось повернуть процесс вспять — приведенный выше код генерирует следующую спецификацию через Springdoc:

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

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'
При использовании генераторов Java и Javascript информация о наследовании теряется и генерируются странные классы, такие как «BarWidgetAllOf». Является ли это ограничением выразительности спецификации OAS или просто ограничением реализации генераторов (я пробовал как с генераторами swagger-codegen, так и с openapitools)?

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

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

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

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

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

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