【发布时间】:2020-05-14 22:38:39
【问题描述】:
我正在尝试使用 swagger-codegen 为模式规范生成 Java API 客户端。
该架构使用供应商扩展 x-discriminator-value 创建继承模型。
例如,我使用了作为 yaml here 找到的模式规范并转换为 json(我用“spec”根包装了结果,因此我可以将结果发送到在线代码生成器,如下所述)。
当我尝试在本地或使用在线代码生成器生成 Java 客户端时,我发现没有使用 x-discriminator-value 值完成去串化。
相反,它是使用模型名称完成的。
我在生成的JSON.java 文件中看到了这一点,其中包含从鉴别器到类的映射:
classByDiscriminatorValue.put("PhoneSetting".toUpperCase(), PhoneSetting.class);
classByDiscriminatorValue.put("SceneSetting".toUpperCase(), SceneSetting.class);
classByDiscriminatorValue.put("TextSetting".toUpperCase(), TextSetting.class);
[要看到这个你可以post上面的json到https://generator.swagger.io/api/gen/clients/java并检查JSON.java文件。
据我了解,我应该知道密钥应该是 x-discriminator-value 值。例如,由于架构具有:
"SceneSetting": {
"description": "Scene Setting",
"x-discriminator-value": "SCENE",
"allOf": [
{
"$ref": "#/definitions/SectionSetting"
},
那么我应该有一个映射
classByDiscriminatorValue.put("SCENE".toUpperCase(), SceneSetting.class);
而不是 classByDiscriminatorValue.put("SceneSetting".toUpperCase(), SceneSetting.class);
如果能提供任何帮助,我将不胜感激。
【问题讨论】:
-
你确定 Swagger Codegen 支持
x-discriminator-value?对应的feature request处于打开状态。 -
@Helen - 谢谢。在这里我看到它被合并了:github.com/swagger-api/swagger-codegen/pull/4252 还有我在docs.apimatic.io/advanced/swagger-codegen-extensions找到的文档
-
@Helen 如果您认为可以对上述模式示例进行编辑以使生成的 Java 映射具有所需的结果,这也很棒
-
该 PR 似乎已更新
@JsonSubTypes,它没有触及JSON.java文件中的映射。迁移到 OpenAPI 3.0 是否适合您?它内置了对鉴别器映射的支持,因此 codegen 将产生您需要的结果。 -
@Helen 有可能。我可以引导我到一个可以输入到 codegen 的工作示例,看看它是否生成正确的映射?
标签: java swagger openapi swagger-codegen