复杂对象在 shema 中不显示内部类

问题描述 投票:0回答:1

我正在使用 wsdltophp 使用外部 wsdl。这为我生成了一个大型类结构,我希望通过 SwaggerUI 通过我的 API 来使用它。

这就是我注释 API 入口点的方式:

     /**
     * @OA\Post(
     *     path="/vf/alta/{registroFacturacionType}/{datosControlType}",
     *     operationId="vfAlta",
     *     description="",
     *     tags={"vf"},
     *     security={{"bearerAuth":{}}},
     *     @OA\Parameter(
     *          name="registroFacturacionType",
     *          in="path",
     *          required=true,
     *          description="",
     *          @OA\Schema(ref="#/components/schemas/RegistroFacturacionType")
     *     ),
     *     @OA\Parameter(
     *          name="datosControlType",
     *          in="path",
     *          required=true,
     *          description="",
     *          @OA\Schema(ref="#/components/schemas/DatosControlType")
     *     ),
     *     @OA\Response(
     *         response=200,
     *         description="",
     *         @OA\Schema(ref="RespuestaAltaFactuSistemaFacturacionType")
     *     )
     * )
     */

生成的 swagger 入口点现在看起来像这样: enter image description here

我的主类的所有内部类都由字符串表示。如果我们只看第一个属性(IDFactura),这是由wsdltophp

生成的代码
     /**
     * The IDFactura
     * @var \App\Application\ServiceReferences\Verifactu\StructType\IDFacturaExpedidaType|null
     * @OA\Property()
     */
    protected ?\App\Application\ServiceReferences\Verifactu\StructType\IDFacturaExpedidaType $IDFactura = null;

(@OA\Schema 也是由 wsdltophp 生成的)但很明显,我的 SwaggerUI 将这个内部类表示为一个简单的字符串。

由于这个 WSDL 是外部的,我无法控制它,也无法控制 wsdltophp 生成的代码,所以我正在寻找一种解决方案来避免更新/修改这些外部类

php swagger
1个回答
0
投票

要解决内部类在 Swagger 中表示为字符串的问题,您可以在控制器或 API 入口点中使用

@OA\Schema
注释手动引用内部类的正确架构,而无需修改生成的 WSDL 类。

例如,您可以像这样显式定义

IDFacturaExpedidaType
的架构,而不是依赖自动检测:

/**
 * The IDFactura
 * @OA\Property(ref="#/components/schemas/IDFacturaExpedidaType")
 * @var \App\Application\ServiceReferences\Verifactu\StructType\IDFacturaExpedidaType|null
 */

这可确保 Swagger 正确引用复杂类型,而不是将其视为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.