从swagger-codegen迁移至openapi-generator时Mustache语法报错
问题解答
1. OpenAPI Generator是否支持<templateDirectory>标签?
支持。openapi-generator-maven-plugin完全支持通过<templateDirectory>配置自定义Mustache模板目录,但模板的上下文变量、语法细节与swagger-codegen存在差异,不能直接复用swagger-codegen的旧模板。
2. 报错及逗号缺失的原因
这是旧swagger-codegen模板与openapi-generator模板体系不兼容导致的:
- 语法报错:openapi-generator对Mustache表达式的解析规则、上下文变量的命名/结构和swagger-codegen不一样。旧模板里依赖swagger-codegen特有的变量或语法,openapi-generator无法识别,就会抛出
Illegal start of expression ',', ')', or '[' expected的解析错误。 - 逗号缺失:swagger-codegen中用来控制代码逗号输出的模板逻辑(比如循环中的分隔符判断变量),在openapi-generator的上下文里可能不存在或者逻辑不同。比如旧模板里依赖
{{#hasMore}},{{/hasMore}}这类变量生成逗号,而openapi-generator没有这个变量,就会导致逗号无法正确输出。
3. 是否为OpenAPI Generator的Bug?
不是Bug。OpenAPI Generator是从swagger-codegen分叉出来的独立项目,后续迭代中调整了模板的上下文结构、变量体系和语法支持,目的是提升扩展性和规范度,并非兼容旧swagger-codegen的所有模板逻辑。旧模板需要针对openapi-generator的模板规范做适配才能正常使用。
快速修复建议
- 以openapi-generator默认生成的模板为基准,对比旧模板逐步替换差异部分。
- 调整变量引用和循环逻辑,比如用
{{#each}}配合{{@last}}判断是否需要添加逗号,适配openapi-generator的模板规则。
内容的提问来源于stack exchange,提问作者Reinaldo Neves
相关产品推荐
相关产品推荐

