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

如何在OpenAPI Generator的Mustache模板中使用条件逻辑?

OpenAPI Generator自定义扩展控制@Controller注解生成问题解决

问题场景

使用Maven插件形式的OpenAPI OAS3 Java生成器,基于JavaSpring/apiController.mustache模板生成代码时,尝试通过自定义扩展x-generateController控制@Controller注解的生成,但扩展未被识别,无论放在OpenAPI契约的根级别还是端点级别都无效,模板中输出该扩展值为空。

解决步骤

1. 修正扩展的放置层级

OpenAPI Generator生成Spring控制器时,通常基于tag生成对应控制器类,需将x-generateController扩展放在tags节点下的具体tag对象中,而非根级别或单个端点:

openapi: 3.0.3
tags:
  - name: PetController
    x-generateController: true
    description: 宠物相关操作接口
paths:
  /pet:
    get:
      tags:
        - PetController
      # 其他接口定义

2. 调整模板中扩展的访问路径

apiController.mustache的上下文是ApiTemplateModel,控制器对应的标签扩展在tag对象下,需修改模板代码为:

{{#tag.vendorExtensions.x-generateController}}
@Controller("{{classname}}")
{{/tag.vendorExtensions.x-generateController}}

若需默认生成、仅扩展为false时不生成,可反向判断:

{{^tag.vendorExtensions.x-generateController}}
// 不生成@Controller注解
{{/tag.vendorExtensions.x-generateController}}

3. 验证模板上下文变量

若不确定扩展层级,可在模板中临时添加代码打印当前上下文所有变量,生成代码后查看输出确认x-generateController的位置:

// 打印当前上下文变量:{{.}}

4. 确保Maven插件正确加载自定义模板

检查Maven插件配置,确认templateDirectory指向自定义模板的正确目录,且模板路径与生成器匹配(Spring生成器的模板需放在模板目录/JavaSpring下):

<plugin>
  <groupId>org.openapitools</groupId>
  <artifactId>openapi-generator-maven-plugin</artifactId>
  <version>6.6.0</version> <!-- 使用最新稳定版本 -->
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec>
        <generatorName>spring</generatorName>
        <templateDirectory>${project.basedir}/src/main/resources/openapi-templates</templateDirectory>
        <apiPackage>com.example.api</apiPackage>
        <modelPackage>com.example.model</modelPackage>
      </configuration>
    </execution>
  </executions>
</plugin>

5. 替代方案:基于标签名称的条件控制

若自定义扩展仍有问题,可临时通过标签名称做条件判断,例如仅当标签名为PetController时生成注解:

{{#tag.name}}
  {{#eq tag.name "PetController"}}
    @Controller("{{classname}}")
  {{/eq}}
{{/tag.name}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:01:08