如何在 Swagger 中使用自定义模板
How to use custom templates in Swagger
我有这个 JavaJaxRs 字典和我的模板:
/templates/JavaJaxRs
我编辑了其中一些。并想将它们用于我的 API 代(代码的灵感来自 https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java 的这种方法):
System.out.println("Generating API for: " + location);
DefaultGenerator generator = new DefaultGenerator();
Swagger swagger = new SwaggerParser().read(location);
CodegenConfig config = CodegenConfigLoader.forName(this.language);
config.setOutputDir(new File(this.apiGeneratedSrcPath).getPath());
if (null != templateDirectory) {
config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory);
}
if (null != modelPackage) {
config.additionalProperties().put(MODEL_PACKAGE_PARAM, modelPackage);
}
if (null != apiPackage) {
config.additionalProperties().put(API_PACKAGE_PARAM, apiPackage);
}
if (null != invokerPackage) {
config.additionalProperties().put(INVOKER_PACKAGE_PARAM, invokerPackage);
}
if (configOptions != null) {
for (CliOption langCliOption : config.cliOptions()) {
if (configOptions.containsKey(langCliOption.getOpt())) {
config.additionalProperties().put(langCliOption.getOpt(),
configOptions.get(langCliOption.getOpt()));
}
}
}
if (null != configurationFile) {
Config genConfig = ConfigParser.read(configurationFile);
if (null != genConfig) {
for (CliOption langCliOption : config.cliOptions()) {
if (genConfig.hasOption(langCliOption.getOpt())) {
config.additionalProperties().put(langCliOption.getOpt(), genConfig.getOption(langCliOption.getOpt()));
}
}
} else {
throw new RuntimeException("Unable to read configuration file");
}
}
ClientOptInput input = new ClientOptInput().opts(new ClientOpts()).swagger(swagger);
input.setConfig(config);
generator.opts(input).generate();
不知何故,我总能得到使用标准模板文件生成的代码。
更新:
如果我没记错的话,我有一个条件错误:
if(null != templateDirectory)
config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory);
或其他地方,但条件正确,代码按预期工作。
我把问题留在这里,也许它会对其他用户有所帮助。
您可以获得代码生成器的帮助选项,例如:
java -jar swagger-codegen-cli.jar help generate
应该告诉您可以使用 -t
参数覆盖模板位置:
java -java swagger-codegen-cli.jar generate -l {language} -t path/to/templates
关于上述ava -java swagger-codegen-cli.jar generate -l {language} -t path/to/templates
,
我已经设法让它与当前正在开发的版本 (2.2.0) 一起工作。
对于 2.1.6(当前 GA),它不起作用。
我在 GitHub 的 swagger-codegen 上发布了以下内容:
https://github.com/swagger-api/swagger-codegen/issues/3188
虽然没有得到任何关注...
我有这个 JavaJaxRs 字典和我的模板:
/templates/JavaJaxRs
我编辑了其中一些。并想将它们用于我的 API 代(代码的灵感来自 https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java 的这种方法):
System.out.println("Generating API for: " + location);
DefaultGenerator generator = new DefaultGenerator();
Swagger swagger = new SwaggerParser().read(location);
CodegenConfig config = CodegenConfigLoader.forName(this.language);
config.setOutputDir(new File(this.apiGeneratedSrcPath).getPath());
if (null != templateDirectory) {
config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory);
}
if (null != modelPackage) {
config.additionalProperties().put(MODEL_PACKAGE_PARAM, modelPackage);
}
if (null != apiPackage) {
config.additionalProperties().put(API_PACKAGE_PARAM, apiPackage);
}
if (null != invokerPackage) {
config.additionalProperties().put(INVOKER_PACKAGE_PARAM, invokerPackage);
}
if (configOptions != null) {
for (CliOption langCliOption : config.cliOptions()) {
if (configOptions.containsKey(langCliOption.getOpt())) {
config.additionalProperties().put(langCliOption.getOpt(),
configOptions.get(langCliOption.getOpt()));
}
}
}
if (null != configurationFile) {
Config genConfig = ConfigParser.read(configurationFile);
if (null != genConfig) {
for (CliOption langCliOption : config.cliOptions()) {
if (genConfig.hasOption(langCliOption.getOpt())) {
config.additionalProperties().put(langCliOption.getOpt(), genConfig.getOption(langCliOption.getOpt()));
}
}
} else {
throw new RuntimeException("Unable to read configuration file");
}
}
ClientOptInput input = new ClientOptInput().opts(new ClientOpts()).swagger(swagger);
input.setConfig(config);
generator.opts(input).generate();
不知何故,我总能得到使用标准模板文件生成的代码。
更新:
如果我没记错的话,我有一个条件错误:
if(null != templateDirectory)
config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory);
或其他地方,但条件正确,代码按预期工作。
我把问题留在这里,也许它会对其他用户有所帮助。
您可以获得代码生成器的帮助选项,例如:
java -jar swagger-codegen-cli.jar help generate
应该告诉您可以使用 -t
参数覆盖模板位置:
java -java swagger-codegen-cli.jar generate -l {language} -t path/to/templates
关于上述ava -java swagger-codegen-cli.jar generate -l {language} -t path/to/templates
,
我已经设法让它与当前正在开发的版本 (2.2.0) 一起工作。 对于 2.1.6(当前 GA),它不起作用。
我在 GitHub 的 swagger-codegen 上发布了以下内容: https://github.com/swagger-api/swagger-codegen/issues/3188
虽然没有得到任何关注...