Wie kann ich eine Openapi-Definition generieren, die einen polymorphen Anforderungstext unterstützt und entsprechend CliJava

Java-Forum
Anonymous
 Wie kann ich eine Openapi-Definition generieren, die einen polymorphen Anforderungstext unterstützt und entsprechend Cli

Post by Anonymous »

Nehmen wir an, ich habe eine Spring Boot REST API mit dem folgenden Endpunkt und den folgenden definierten Modellen (Getter/Setter wurden der Kürze halber weggelassen)

Code: Select all

@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 )
{
}
}
Ist es möglich, dies in einer OpenAPI-Spezifikation auszudrücken, sodass ein Generator sowohl
  • den obigen Code als Server-Stubs als auch als Modelle reproduzieren kann
  • einen Javascript-Client erzeugen kann, der die Modelle und die API korrekt darstellt
Nachdem ich dies eingerichtet und sowohl Springdoc als auch Springfox ausprobiert habe, um mir aus dem Code eine Spezifikation zu generieren, habe ich es dann geschafft Der Vorgang konnte nicht rückgängig gemacht werden. Der obige Code generiert über Springdoc die folgende Spezifikation:

Code: Select all

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'
Wenn sowohl Java- als auch Javascript-Generatoren verwendet werden, scheinen die Vererbungsinformationen verloren zu gehen und seltsame Klassen wie „BarWidgetAllOf“ werden generiert. Ist dies eine Einschränkung der Ausdruckskraft der OAS-Spezifikation oder nur eine Einschränkung der Implementierungen der Generatoren (ich habe es sowohl mit den Generatoren swagger-codegen als auch openapitools versucht)?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post