typescript - Hvordan kan jeg ha flere DTO-er for NestJS Request Body/Swagger


så jeg har en rute som kan akseptere to forskjellige DTO-er. Jeg har problemer med å få disse to DTO-ene til å koble seg til/vises på Swagger. Jeg bruker Swagger-pluginen med NestJS. Jeg vet at i ren Swagger kan du gjøre noe sånt. Noen ideer?

Request:
  oneOf:
    - $ref: "#/components/schemas/RequestOneType"
    - $ref: "#/components/schemas/RequestTwoType"

Ethvert eksempel på hva jeg har akkurat nå er som

async initApp(@Body() req: RequestOneDto | RequestTwoDto , @Res({ passthrough: true }) res: Response) {

}

eksporter klasse RequestOneDto { @Length(1,10); navn: string

@Max(10) verdi: nummer }

eksporter klasse RequestTwoDto { @Length(1,15); navn: string

@Max(15) verdi: nummer

state: 'New York' }

Svar #1

Har du prøvd denne måten?

@ApiExtraModels(RequestOneDto, RequestTwoDto)
@ApiBody({
  schema: {
    oneOf: [
      {
        $ref: getSchemaPath(RequestOneDto),
      },
      {
        $ref: getSchemaPath(RequestTwoDto),
      },
    ],
  },
})
async initApp(@Body() body: RequestOneDto | RequestTwoDto) {}

Du kan importere ApiBody, ApiExtraModels fra @nestjs/swagger

Hvis du ikke vil inkludere modellene eksplisitt, kan du registrere dem på ett sted som

const document = SwaggerModule.createDocument(app, options, {
  extraModels: [RequestOneDto, RequestTwoDto],
});

Og her er mer informasjon

Relaterte artikler