You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swagger Codegen生成C#的OneOf接口无实现问题咨询

问题诊断与解决方案

核心原因:OAS结构与Swagger Codegen 3.x的兼容性问题

NHS电子处方服务的OAS定义中,oneOf区域的FHIR资源结构,和Swagger Codegen 3.x的C#生成器解析逻辑不匹配,再加上该版本对FHIR资源的命名、接口实现支持有局限,导致出现三类问题:

1. OneOf接口无实现类+错误生成CreateMedicationRequestResource

  • 本质:OAS里oneOf引用的是FHIR标准MedicationRequest资源,但Swagger Codegen 3.x无法自动把FHIR资源映射为实现oneOf接口的类,反而错误生成了冗余的CreateMedicationRequestResource类(这类带Create前缀的类是生成器对POST请求体的误推导)。
  • 临时解决:手动创建MedicationRequest类并实现OneOfR4PrepareBodyEntryItems接口,把CreateMedicationRequestResource的属性迁移过来,保证请求体结构符合FHIR规范。

2. 接口未添加I前缀

  • 本质:Swagger Codegen 3.x的C#生成器默认不给oneOf生成的接口加I前缀,这是版本默认行为,不是配置错误。
  • 解决:
    • 方案一:手动把接口重命名为IOneOfR4PrepareBodyEntryItems
    • 方案二:自定义模板修改生成逻辑:
      1. 下载Swagger Codegen的C#生成器模板文件
      2. 修改api.mustache或model.mustache里的接口命名规则,添加I前缀
      3. 生成时通过-t参数指定自定义模板路径:
        java -jar .\swagger-codegen-cli.jar generate -i https://digital.nhs.uk/restapi/oas/324177 -l csharp -t ./custom-csharp-templates
        

3. 工具版本优化建议

Swagger Codegen 3.x对FHIR这类复杂医疗API支持不完善,建议换成OpenAPI Generator(Swagger Codegen的继任项目),它对FHIR和oneOf的解析更准确:

  • 替换命令:
    java -jar openapi-generator-cli.jar generate -i https://digital.nhs.uk/restapi/oas/324177 -g csharp
    
    它能准确生成实现oneOf接口的FHIR资源类,还可通过配置参数控制接口前缀。

总结

主要问题是OAS的FHIR特定结构与Swagger Codegen 3.x兼容性不足,其次是版本默认行为限制。优先尝试升级到OpenAPI Generator,若必须用Swagger Codegen,就手动调整类和接口结构。

内容的提问来源于stack exchange,提问作者amarsha4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:05:13